{Access Memory for win31&win95}
{must compile with delphi1.0---16bit App}
{no VXD or DLL need}
{pure native source code here,all include}
{Writen by Xueyu,LEE}
const fMemoryMapped:boolean=false;
var fSelector :word;
fBaseAddr :LongInt;
fMemoryPointer :Pointer;
fMemorySize :Word;
function MapPhysMemory(PhAddr:LongInt; Size:Word):Pointer;
{input: }
{ phAddr: physics Address}
{ Size : Alloc Size(bytes)}
{output:}
{ Result: pointer to the physics memory}
{example:}
{ access the address 0:$123}
{ ptr:=MapPhysMemory($123,1)}
begin
Result:=fMemoryPointer;
if fMemoryMapped then UnmapPhysMemory;
fMemorySize:=Size;
fBaseAddr:=PhAddr;
fMemoryMapped:=TRUE;
fSelector:=AllocSelector(DSeg);
SetSelectorBase(fSelector,PhAddr);
SetSelectorLimit(fSelector,Size);
fMemoryPointer:=Ptr(fSelector,0);
Result:=fMemoryPointer;
end;
procedure UnmapPhysMemory;
begin
if fMemoryMapped then FreeSelector(fSelector);
fSelector:=0;
fMemoryMapped:=FALSE;
fBaseAddr:=0;
fMemoryPointer:=NIL;
fMemorySize:=0;
end;
///////////////////////////////////////////
BOOL ReadProcessMemory(
HANDLE hProcess, // handle of the process whose memory is read
LPCVOID lpBaseAddress, // address to start reading
LPVOID lpBuffer, // address of buffer to place read data
DWORD nSize, // number of bytes to read
LPDWORD lpNumberOfBytesRead // address of number of bytes read
);
BOOL WriteProcessMemory(
HANDLE hProcess, // handle to process whose memory is written to
LPVOID lpBaseAddress, // address to start writing to
LPVOID lpBuffer, // pointer to buffer to write data to
DWORD nSize, // number of bytes to write
LPDWORD lpNumberOfBytesWritten // actual number of bytes written
);