AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi lokale Benutzerrechte herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

lokale Benutzerrechte herausfinden

Ein Thema von mbeilharz · begonnen am 21. Dez 2006 · letzter Beitrag vom 26. Nov 2010
Antwort Antwort
mbeilharz

Registriert seit: 12. Mai 2006
18 Beiträge
 
#1

Re: lokale Benutzerrechte herausfinden

  Alt 2. Jan 2007, 16:00
Durch stöbern im NET habe ich eine Funktion gefunden, die so funktioniert (auf alle Fälle bisher), wie ich es erhofft habe.

Benutzer meldet sich an einem Rechner an, Benutzer ist per Domänendefinition (sämtliche Anwender dieser Domäne) an dem Rechner Benutzer, per lokaler Definition hat er Adminrechte.

Ich habe diese Funktion bei ein paar Accounts, mit unterschiedlichsten Ausprägungen, getestet und bisher funzt die Funktion.

Ganz daneben kann die Funktion nicht sein, vielleicht wäre als Name statt IsAdmin eher ein IsLocalAdmin() besser? Aber das darf jeder halten, wie er will.

Delphi-Quellcode:
function IsAdmin(): LongBool;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID: DWORD = $00000020;
  DOMAIN_ALIAS_RID_ADMINS: DWORD = $00000220;
  SE_GROUP_ENABLED: DWORD = $00000004;
var
  TokenHandle : THandle;
  ReturnLength : DWORD;
  TokenInformation : PTokenGroups;
  AdminSid : PSID;
  Loop : Integer;

begin
  Result := False;
  TokenHandle := 0;
  TokenInformation := nil;
  AdminSid := nil;
  if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then
  try
    ReturnLength := 0;
    GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength);
    TokenInformation := GetMemory(ReturnLength);
    if Assigned(TokenInformation) and
       GetTokenInformation(TokenHandle, TokenGroups, TokenInformation, ReturnLength, ReturnLength) then begin
      AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminSid );
      for Loop := 0 to TokenInformation^.GroupCount - 1 do begin
        if (SE_GROUP_ENABLED = (TokenInformation^.Groups[Loop].Attributes and SE_GROUP_ENABLED)) and
            EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) then begin
          Result := True;
          Break;
        end;
      end;
      FreeSid(AdminSid);
      AdminSid := nil;
    end;
  finally
    FreeSid(AdminSid);
    FreeMemory(TokenInformation);
    CloseHandle(TokenHandle);
  end;
end;
so long
michael
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#2

AW: lokale Benutzerrechte herausfinden

  Alt 26. Nov 2010, 17:47
Super toll
Martin MIchael
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz