Luego de haber seguido el
anterior hilo y éste, repito lo que ya dije:
Cita:
Empezado por cHackAll
Para acceder a la memoria RAM necesitas modificar los privilegios de acceso a dicho objeto (restringido por su naturaleza crítica), luego realizar un mapeado del mismo en tu proceso y leer por bloques razonables múltiplos de 4 Kb que es el tamaño del PAGE_SIZE en arquitecturas x86...
|
Y recalco que es MUY peligroso escribir en la memoria RAM puesto que allí recide el núcleo del SO, los Drivers y muchos otros componentes del SO que al ser modificados provocarían las peores excepciones y la perdida de datos.
Código Delphi
[-]uses Windows, SysUtils;
const Section: array [0..7] of PWideChar = (Ptr(24), nil, @Section[6], Ptr(64), nil, nil, Ptr(3014700), '\Device\PhysicalMemory');
function NtOpenSection(var Handle: Cardinal; Access: Cardinal; const Section): Cardinal; stdcall; external 'ntdll';
var
Handle, Time, Size, Offset: Cardinal;
MemoryStatus: TMemoryStatus;
lpBuffer: PChar;
begin
if NtOpenSection(Handle, 4, Section) = 0 then
begin
GlobalMemoryStatus(MemoryStatus);
Size := MemoryStatus.dwTotalPhys;
Offset := 0;
Time := GetTickCount;
repeat lpBuffer := MapViewOfFile(Handle, 4, 0, Offset, $1000);
if Assigned(lpBuffer) then
UnmapViewOfFile(lpBuffer);
Inc(Offset, $1000);
until Offset = Size;
Time := GetTickCount - Time;
CloseHandle(Handle);
MessageBox(0, PChar(IntToStr(Time div 1000)+'.'+IntToStr(Time mod 1000)), nil, 0);
end;
end.
El anterior ejemplo hace lo que comentaba en mi post citado, pero te aconsejo utilizar la API LocalAlloc para emular lo que necesitas, caso contrario no dejes de considerar lo comentado por
HySTD en el anterior hilo.
Saludos