Danke für die Tips. Zur Umsetzung:
Zitat:
Vergleiche mit dem Wert den du finden willst (IMO ist das STATUS_BUFFER_TOO_SMALL aus JwaNtStatus) und andernfalls NT_SUCCESS() - bei dir mußt du das der Reihe nach machen. Also wenn STATUS_BUFFER_TOO_SMALL dann Puffer freigeben und mit neuer Größe allozieren - sonst, wenn NT_SUCCESS nicht True zurückgibt, Fehler ausgeben und raus aus der Routine.
Delphi-Quellcode:
status:= jwanative.NTQuerySystemInformation(jwanative.SystemHandleInformation,
@HANDLEInfo,
sizeof(jwanative.PSYSTEM_HANDLE_INFORMATION),
0);
if status = jwantstatus.STATUS_BUFFER_TOO_SMALL then
begin
form1.Memo1.Lines.Add('STATUS_BUFFER_TOO_SMALL: '+IntToStr(status)); //info
end else
if JwaWinType.NT_SUCCESS(Status)= false then begin
form1.Memo1.Lines.Add('NT_SUCCESS: fehler'); //hier schmeißt er mich raus
Exit; //worin liegt der fehler?
end else
form1.Memo1.Lines.Add('NT_SUCCESS: ok');
Zitat:
SYSTEM_HANDLE_INFORMATION hat eine feste Größe, daher benutzt du hier einfach nur sizeof()
Wenn richtig verstanden, dann so wie oben.
Anschließend..
Zitat:
Pointerwert zu addieren und so den Pointer zum nächsten Record zu bekommen (Stichwort: Pointerarithmetik!).
Am Ende wirst du irgendwo bei SYSTEM_OBJECT_INFORMATION landen.
so was "in der Art"
Delphi-Quellcode:
var
HANDLEListBuffer: PChar;
obj: PSystem_Object_Information;
offset: cardinal;
...
obj := PSYSTEM_OBJECT_INFORMATION(handleListBuffer);
repeat
obj := PSYSTEM_OBJECT_INFORMATION(Cardinal(obj) + Offset);
Offset := obj^.NextEntryOffset;
...
until Offset = 0;
...
FreeMem(HANDLEListBuffer);
watch out ... SySSnapper... coming soon