Часто бывает необходимо узнать, запущена ли программа с правами администратора или же с правами простого пользователя. Нижеприведенная функция вернет истину, если программа запущена под админом.
{Определение "под кем" запущена программа}
uses Windows;
function isAdmin: Boolean;
const
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
siaNtAuthority: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
var
hAccessToken: Cardinal;
ptgGroups: PTokenGroups;
dwInfoBufferSize: DWORD;
psidAdmins: PSID;
i: Integer;
begin
Result:= false;
if OpenProcessToken(GetCurrentProcess, TOKEN_READ, hAccessToken) then begin
ptgGroups:= GetMemory(1024);
try
if GetTokenInformation(hAccessToken,
TokenGroups,
ptgGroups,
1024,
dwInfoBufferSize) then begin
if AllocateAndInitializeSid(siaNtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
psidAdmins) then
try
for i:= 0 to ptgGroups^.GroupCount - 1 do
if EqualSid(psidAdmins, ptgGroups^.Groups[i].Sid) then begin
Result:= True;
Break;
end;
finally
FreeSid(psidAdmins);
end; { End AllocateAndInitializeSid }
end;
finally
FreeMemory(ptgGroups);
end; { End ptgGroups }
end; { End OpenProcessToken }
end;
