Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: Per ProcessId prüfen, ob der Benutzer Admin ist (oder: ProcessId -> UserTokenHand

  Alt 15. Aug 2014, 08: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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Aug 2014 um 08:08 Uhr)
  Mit Zitat antworten Zitat