@Olli: Genau das hab ich gesucht.
Es fehlt nur noch die endgültige Umsetzung.
1) Wenn der erste Teil bis //-------------- richtig ist
2) Wie kann ich alle Werte korrekt anzeigen, irgendwie steh ich auf dem Schlauch
Delphi-Quellcode:
implementation
uses JwaNative;
...
function SHOWHANDLE(const lv: TListView): BOOL;
const
BUF_SIZE = $15000;
var
HANDLEListBuffer: PChar;
HANDLEInfo: jwanative.PSYSTEM_HANDLE_INFORMATION;
BufSize: Cardinal;
Status: Integer;
i: integer;
li: TListItem;
begin
Result := false;
lv.Items.BeginUpdate;
lv.Items.Clear;
// capture Liste
BufSize := BUF_SIZE;
repeat
GetMem(HANDLEListBuffer, BufSize);
if HANDLEListBuffer = nil then
begin
lv.Items.EndUpdate;
Exit;
end;
Status := jwanative.NtQuerySystemInformation(SystemHandleInformation ,
HANDLEListBuffer,
BufSize,
nil);
if Status <> NO_ERROR then
begin
// Buffer zu klein, vergrößern
FreeMem(HANDLEListBuffer);
Inc(BufSize, BUF_SIZE);
end
else if Status < 0 then // irgendein Fehler...
begin
lv.Items.EndUpdate;
Exit;
end;
until Status >= 0;
// AB HIER STECK ICH FEST ---------------------------------------
for i:= 1 to 6 do begin //zur probe nur mal die ersten 6 Werte...
HANDLEInfo := PSYSTEM_HANDLE_INFORMATION(HANDLEListBuffer);
HANDLEInfo := PSYSTEM_HANDLE_INFORMATION(Cardinal(HANDLEInfo));
li := lv.Items.Add;
li.Caption:= HANDLEInfo^.ProcessId;
li.SubItems.Add(IntToStr(HANDLEInfo^.Handle));
end;
Result := true;
FreeMem(HANDLEListBuffer);
lv.Items.EndUpdate;
end;
watch out ... SySSnapper... coming soon