Часто бывает необходимо узнать, запущена ли программа с правами администратора или же с правами простого пользователя. Нижеприведенная функция вернет истину, если программа запущена под админом.
{Определение "под кем" запущена программа} 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;