Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
Delphi 12 Athens
|
AW: Per ProcessId prüfen, ob der Benutzer Admin ist (oder: ProcessId -> UserTokenHand
15. Aug 2014, 09:03
Was passiert, wenn du mal auf die wahnwitzige Idee kommst und die Rückgabewerte mit prüfen tätest?
Und warum wurde hUserToken nicht wieder geschlossen?
z.B.:
Delphi-Quellcode:
hProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
if hProcessHandle = 0 then
RaiseLasrOSError; // man mag es nicht glauben, aber viele APIs sagen, warum sie nicht funktionierten
try
if not OpenProcessToken(hProcessHandle, TOKEN_ALL_ACCESS, hUserToken) then
RaiseLasrOSError;
try
bAdmin := UserInGroup(DOMAIN_ALIAS_RID_ADMINS, hUserToken);
finally
CloseHandle(hUserToken); // das fehlte auch noch
end;
finally
CloseHandle(hProcessHandle);
end
function UserInGroup(Group: DWORD; hUserToken: ...): Boolean;
var
pIdentifierAuthority: TSIDIdentifierAuthority;
pSid : Windows.PSID;
IsMember: BOOL;
begin
pIdentifierAuthority := SECURITY_NT_AUTHORITY;
Result := AllocateAndInitializeSid(pIdentifierAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, Group, 0, 0, 0, 0, 0, 0, pSid);
if Result then
try
if not CheckTokenMembership(hUserToken, pSid, IsMember) then
RaiseLastOSError;
Result := IsMember;
finally
FreeSid(pSid);
end
else
RaiseLastOSError;
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
Geändert von himitsu (15. Aug 2014 um 09:08 Uhr)
|
|
Zitat
|