Thema: Delphi Lokale Rechte abfragen?!

Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: Lokale Rechte abfragen?!

  Alt 24. Mai 2007, 11:04
Und was macht diese Funktion in Deinem Netz ?
Delphi-Quellcode:
function IsAdministrator: Boolean;
var
  psidAdmin: Pointer;
  Token: THandle;
  Count: DWORD;
  TokenInfo: PTokenGroups;
  HaveToken: Boolean;
  I: Integer;
begin
  If isWIN9x Then
  Begin
    Result:= TRUE;
    Exit;
  End;
  Result := False;
  psidAdmin := nil;
  HaveToken := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, Token);
  if (not HaveToken) and (GetLastError = ERROR_NO_TOKEN) then
  begin
    HaveToken := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, Token);
  end;
  if HaveToken then
  begin
    AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin);
    GetTokenInformation(Token, TokenGroups, nil, 0, Count);
    TokenInfo:= PTokenGroups(AllocMem(Count));
    GetTokenInformation(Token, TokenGroups, TokenInfo, Count, Count);
    for I := 0 to TokenInfo^.GroupCount - 1 do
    begin
      {$R-} // Groups is an array [0..0] of TSIDAndAttributes, ignore ERangeError
      Result := EqualSid(psidAdmin, TokenInfo^.Groups[I].Sid);
      {$R+}
      if Result then
        Break;
    end;
    FreeMem(TokenInfo);
    CloseHandle(Token);
    FreeSid(psidAdmin);
  end;
end;
Edit: Diese Funktion stammt aus der Unit os_info2 aus diesem Beitrag.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat