Ich hatte es erst so:
Delphi-Quellcode:
function GetProcessOwner(PID: DWord; var SID: PSID): Boolean;
var
hProcess : THandle;
pSIDDummy : PSID;
SecDescriptor : PSECURITY_DESCRIPTOR;
err : DWord;
const
SE_UNKNOWN_OBJECT_TYPE: DWord = 0;
SE_FILE_OBJECT : DWord = 1;
SE_SERVICE : DWord = 2;
SE_PRINTER : DWord = 3;
SE_REGISTRY_KEY : DWord = 4;
SE_LMSHARE : DWord = 5;
SE_KERNEL_OBJECT : DWord = 6;
SE_WINDOW_OBJECT : DWord = 7;
begin
hProcess := 0;
err := 0;
try
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or GENERIC_READ, False, pid);
if (hProcess <> 0) then
begin
err := GetSecurityInfo(hProcess, SE_KERNEL_OBJECT, OWNER_SECURITY_INFORMATION, @pSIDDummy, nil, nil, nil,
@SecDescriptor);
if (err = 0) then
begin
SID := pSIDDummy;
//LocalFree(Cardinal(SecDescriptor));
end;
CloseHandle(hProcess);
end;
except
end;
// Successfull if err = 0 AND hProcess <> 0
Result := (err = 0) and (hProcess <> 0);
end;
Ich übergebe eigentlich gerne var Paramter, damit ich den Rückgabewert zum Überprüfen, ob die Funktion erfolgreich war oder nicht nutzen kann.
Wie würdest du es denn machen?