Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#10

Re: Abfragen ob Process Adminrechte hat?

  Alt 7. Jun 2006, 19:50
Zitat von Orbmu2k:
Ich hab grad mal nach dem SE_GROUP_ENABLED Flag im MSDN nachgeschlagen das gibt es ja schon seit es NT gibt ... dann brauch ich mir ja keine Sorgen machen das die Abfrage dann auf "älteren" Windows Versionen falsche Ergebnisse liefert.
Wegen der Abwärtskompatibilität brauchst du dir keine Sorgen machen

Die Überprüfung ist immer noch 'vereinfacht' (normalerweise müsste man mit der SID einen SD erstellen und mittels AccessCheck gegen das Token prüfen).

Wenn man Windows XP voraussetzen kann, dann beschränkt sich die 'korrekte' Abfrage auf:
Delphi-Quellcode:
function IsUserAdmin: BOOL;
begin
  Result := SHTestTokenMembership(THandle(nil), DOMAIN_ALIAS_RID_ADMINS);
end;
Wenn man Windows 2000 voraussetzen kann, dann beschränkt sich die 'korrekte' Abfrage auf:
Delphi-Quellcode:
function IsUserAdmin: BOOL;
var
  SidToCheck: PSID;
begin
  Result := AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
    SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
    0, 0, 0, 0, 0, 0, SidToCheck);
  if Result then
  begin
    if not CheckTokenMembership(THandle(nil), SidToCheck, Result) then
      Result := False;
    FreeSid(SidToCheck);
  end;
end;
Wenn man allerdings Windows NT 4.0 unterstützen muss, dann wird's aufwendig (InitializeSecurityDescriptor, SetSecurityDescriptorOwner, SetSecurityDescriptorGroup, InitializeAcl, AddAccessAllowedAce, SetSecurityDescriptorDacl, AccessCheck).
  Mit Zitat antworten Zitat