mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
71 lines
2.3 KiB
ObjectPascal
71 lines
2.3 KiB
ObjectPascal
unit Filehandler;
|
|
|
|
{
|
|
implement replaced handlers for ReadProcssMemory and WriteProcessMemory so it
|
|
reads/writes to the file instead
|
|
}
|
|
|
|
interface
|
|
|
|
uses windows;
|
|
|
|
function ReadProcessMemoryFile(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
|
|
function WriteProcessMemoryFile(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
|
|
function VirtualQueryExFile(hProcess: THandle; lpAddress: Pointer; var lpBuffer: TMemoryBasicInformation; dwLength: DWORD): DWORD; stdcall;
|
|
|
|
var filehandle: thandle;
|
|
|
|
implementation
|
|
|
|
function ReadProcessMemoryFile(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
|
|
var filesize,ignore:dword;
|
|
begin
|
|
//ignore hprocess
|
|
result:=false;
|
|
filesize:=getfilesize(hprocess,@ignore);
|
|
if dword(lpbaseaddress)>filesize then exit;
|
|
|
|
SetfilePointer(hprocess,dword(lpBaseAddress),nil,FILE_BEGIN);
|
|
result:=Readfile(hprocess,lpbuffer^,nsize,lpNumberOfBytesRead,nil);
|
|
end;
|
|
|
|
function WriteProcessMemoryFile(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
|
|
begin
|
|
SetfilePointer(hprocess,dword(lpBaseAddress),nil,FILE_BEGIN);
|
|
result:=Writefile(hprocess,lpbuffer^,nsize,lpNumberOfBytesWritten,nil);
|
|
end;
|
|
|
|
function VirtualQueryExFile(hProcess: THandle; lpAddress: Pointer; var lpBuffer: TMemoryBasicInformation; dwLength: DWORD): DWORD; stdcall;
|
|
var ignore: dword;
|
|
filesize: dword;
|
|
begin
|
|
filesize:=getfilesize(hprocess,@ignore);
|
|
lpBuffer.BaseAddress:=pointer((dword(lpAddress) div $1000)*$1000);
|
|
lpbuffer.AllocationBase:=lpbuffer.BaseAddress;
|
|
lpbuffer.AllocationProtect:=PAGE_EXECUTE_READWRITE;
|
|
lpbuffer.RegionSize:=filesize-dword(lpBuffer.BaseAddress);
|
|
lpbuffer.RegionSize:=lpbuffer.RegionSize+($1000-lpbuffer.RegionSize mod $1000);
|
|
|
|
|
|
lpbuffer.State:=mem_commit;
|
|
lpbuffer.Protect:=PAGE_EXECUTE_READWRITE;
|
|
lpbuffer.Type_9:=MEM_PRIVATE;
|
|
|
|
if (dword(lpAddress)>filesize) //bigger than the file
|
|
then
|
|
begin
|
|
zeromemory(@lpbuffer,dwlength);
|
|
result:=0
|
|
end
|
|
else
|
|
result:=dwlength;
|
|
|
|
end;
|
|
|
|
end.
|
|
|
|
|
|
|
|
|
|
|
|
|