(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
Re: Prüfen ob ein Benutzer als Admin angemeldet ist
26. Feb 2006, 10:48
schau mal auf "http://www.delphi-fundgrube.de/" und dann gibt es dort das thema:
"Wie man erkennt, ob der aktuelle Windows-Benutzer Administrator-Rechte hat"
und dort steht dann folgendes:
Delphi-Quellcode:
function IsAdmin: Boolean;
const
SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =
(Value: (0, 0, 0, 0, 0, 5));
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
var
hAccessToken : THandle;
ptgGroups : PTokenGroups;
dwInfoBufferSize : Cardinal;
psidAdministrators : PSID;
x : Integer;
begin
Result := false;
if Win32Platform <> VER_PLATFORM_WIN32_NT then
Exit;
if not OpenThreadToken(GetCurrentThread, TOKEN_QUERY,
TRUE, hAccessToken) then begin
if GetLastError <> ERROR_NO_TOKEN then
Exit;
if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
hAccessToken) then
Exit;
end;
try
GetTokenInformation(hAccessToken, TokenGroups, nil,
0, dwInfoBufferSize);
if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
Exit;
GetMem(ptgGroups, dwInfoBufferSize);
try
if not GetTokenInformation(hAccessToken, TokenGroups, ptgGroups,
dwInfoBufferSize, dwInfoBufferSize) then
Exit;
if not AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, psidAdministrators) then
Exit;
try
for x := 0 to ptgGroups^.GroupCount - 1 do begin
if EqualSid(psidAdministrators, ptgGroups^.Groups[x].Sid) then begin
Result := true;
Break;
end;
end;
finally
FreeSid(psidAdministrators);
end;
finally
FreeMem(ptgGroups);
end;
finally
CloseHandle(hAccessToken);
end;
end; {Michael Winter}
Jens Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
|
|
Zitat
|