Wenn Windows hochfährt, werden viele Systemdateien in den Arbeitsspeicher geladen. Dateien wie EXE, SYS und DLL. Der folgende Code zeigt, welche dieser Dateien geladen werden. Denn es kommt auch vor, dass externe Programme, die eigentlich nicht zum System gehören, mitgeladen werden, obwohl man sie im Autostart deaktiviert hat.
Das kann nützlich dazu sein, um zu wissen, welche Programme im Hintergrund laufen, von denen man gar nicht möchte, dass sie laufen.
Der Code liefert die Speicheradresse und den Pfad der Datei wieder, die aktiv sind.
const
DRIVER_INFORMATION = 11;
type
TPDWord = ^DWORD;
TDriverInfo = packed record
Address: Pointer;
Unknown1: DWORD;
Unknown2: DWORD;
EntryIndex: DWORD;
Unknown4: DWORD;
Name: array [0..MAX_PATH + 3] of Char;
end;
//
function GetSysRAMInfo: string;
var
temp, Index, numBytes, numEntries: DWORD;
buf: TPDword;
driverInfo: ^TDriverInfo;
begin
if @NtQuerySystemInformation = nil then
NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),
'NtQuerySystemInformation');
// Obtain required buffer size
NtQuerySystemInformation(DRIVER_INFORMATION, @temp, 0, @numBytes);
// Allocate buffer
buf := AllocMem(numBytes * 2);
NtQuerySystemInformation(DRIVER_INFORMATION, buf, numBytes * 2, @numBytes);
numEntries := buf^;
driverInfo := Pointer(DWORD(buf) + 12);
Result := '';
for Index := 1 to numEntries do
begin
Result := Result + #$D#$A + 'Memory Address : $' + IntToHex(DWORD(driverInfo^.Address), 8) +
' = Name: "' + (driverInfo^.Name) + '"';
Inc(driverInfo);
end;
Delete(Result, 1, 2);
FreeMem(buf);
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(GetSysRAMInfo);
end;
Keine Kommentare:
Kommentar veröffentlichen