Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
Delphi XE8 Enterprise
|
Re: Lokale Rechte abfragen?!
24. Mai 2007, 12: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.
|
|
Zitat
|