mirror of
https://github.com/vapaamies/KolibriOS.git
synced 2025-09-21 22:53:51 +02:00
Unpacker support for LoadFile in KoW
This commit is contained in:
@@ -126,6 +126,7 @@ function LoadFile(FileName: PKolibriChar; var Size: LongWord): Pointer;
|
|||||||
var
|
var
|
||||||
hFile: THandle;
|
hFile: THandle;
|
||||||
QSize: UInt64;
|
QSize: UInt64;
|
||||||
|
Unpacked: Pointer;
|
||||||
begin
|
begin
|
||||||
hFile := CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
|
hFile := CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
|
||||||
if (hFile <> INVALID_HANDLE_VALUE) and GetFileSizeEx(hFile, QSize) then
|
if (hFile <> INVALID_HANDLE_VALUE) and GetFileSizeEx(hFile, QSize) then
|
||||||
@@ -133,6 +134,14 @@ begin
|
|||||||
Size := QSize;
|
Size := QSize;
|
||||||
GetMem(Result, Size);
|
GetMem(Result, Size);
|
||||||
Windows.ReadFile(hFile, Result^, Size, Size, nil);
|
Windows.ReadFile(hFile, Result^, Size, Size, nil);
|
||||||
|
if PPackedFileHeader(Result).Signature = KPCK then
|
||||||
|
begin
|
||||||
|
Size := PPackedFileHeader(Result).UnpackedSize;
|
||||||
|
GetMem(Unpacked, Size);
|
||||||
|
Unpack(PPackedFile(Result)^, Unpacked^);
|
||||||
|
FreeMem(Result);
|
||||||
|
Result := Unpacked;
|
||||||
|
end;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
Size := 0;
|
Size := 0;
|
||||||
|
25
Lib/KoW/Unpack.inc
Normal file
25
Lib/KoW/Unpack.inc
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
(*
|
||||||
|
KolibriOS on Windows (KoW) unpacker (KPCK) support unit
|
||||||
|
|
||||||
|
Copyright (c) 2021 Delphi SDK for KolibriOS team
|
||||||
|
*)
|
||||||
|
|
||||||
|
const
|
||||||
|
KPCK = $4B43504B;
|
||||||
|
|
||||||
|
type
|
||||||
|
PPackedFileHeader = ^TPackedFileHeader;
|
||||||
|
TPackedFileHeader = packed record
|
||||||
|
Signature: LongWord; // KPCK
|
||||||
|
UnpackedSize: LongWord;
|
||||||
|
PackMethod: LongWord; // LZMA, CallTrick, NoCallTrick
|
||||||
|
end;
|
||||||
|
|
||||||
|
PPackedFile = ^TPackedFile;
|
||||||
|
TPackedFile = packed record
|
||||||
|
Header: TPackedFileHeader;
|
||||||
|
Data: array[0..0] of Byte;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Unpack(const Source: TPackedFile; var Dest); stdcall; external;
|
||||||
|
{$L KoW\unpacker.obj}
|
BIN
Lib/KoW/unpacker.obj
Normal file
BIN
Lib/KoW/unpacker.obj
Normal file
Binary file not shown.
@@ -671,6 +671,10 @@ const
|
|||||||
function GetProcAddress(hLib: Pointer; ProcName: PKolibriChar): Pointer; stdcall;
|
function GetProcAddress(hLib: Pointer; ProcName: PKolibriChar): Pointer; stdcall;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFNDEF KolibriOS}
|
||||||
|
{$I KoW\Unpack.inc}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{$IFNDEF KolibriOS}
|
{$IFNDEF KolibriOS}
|
||||||
|
Reference in New Issue
Block a user