Leider nicht zufriedenstellend:
Delphi-Quellcode:
var
dwBufSize: DWord;
bSuccess: Boolean;
Descriptor: PSecurityDescriptor;
SID: Pointer;
Defaulted: LongBool;
begin
Descriptor := nil;
bSuccess := GetKernelObjectSecurity(hProcess,
OWNER_SECURITY_INFORMATION, nil, 0, dwBufSize);
while (not bSuccess) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) do
begin
ReallocMem(Descriptor, dwBufSize);
bSuccess := GetKernelObjectSecurity(hProcess,
OWNER_SECURITY_INFORMATION, Descriptor, dwBufSize, dwBufSize);
end;
if (bSuccess) then
begin
if GetSecurityDescriptorOwner(Descriptor, SID, Defaulted) then
begin
Result := SID;
end;
end;
Teilweise funktioniert ist, bei den meisten Prozessen aber wird eine SECURITY_CREATOR_SID_AUTHORITY oder SECURITY_LOCAL_SID_AUTHORITY zurückgegeben. Wie kann ich nun die wirkliche SID ermitteln? Ich brauche diese, um sie mit der SYSTEM RID, der LOCALSERVIVE RID und der NETWORKSERVICE RID zu vergleichen.