Определение "под кем" запущена программа

Часто бывает необходимо узнать, запущена ли программа с правами администратора или же с правами простого пользователя. Нижеприведенная функция вернет истину, если программа запущена под админом.

1{Определение "под кем" запущена программа}
2uses Windows;
3function isAdmin: Boolean;
4const
5  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
6  DOMAIN_ALIAS_RID_ADMINS = $00000220;
7  siaNtAuthority: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
8var
9  hAccessToken: Cardinal;
10  ptgGroups: PTokenGroups;
11  dwInfoBufferSize: DWORD;
12  psidAdmins: PSID;
13  i: Integer;
14begin
15  Result:= false;
16  if OpenProcessToken(GetCurrentProcess, TOKEN_READ, hAccessToken) then begin
17    ptgGroups:= GetMemory(1024);
18    try
19      if GetTokenInformation(hAccessToken,
20                             TokenGroups,
21                             ptgGroups,
22                             1024,
23                             dwInfoBufferSize) then begin
24 
25        if AllocateAndInitializeSid(siaNtAuthority,
26                                    2,
27                                    SECURITY_BUILTIN_DOMAIN_RID,
28                                    DOMAIN_ALIAS_RID_ADMINS,
29                                    0, 0, 0, 0, 0, 0,
30                                    psidAdmins) then
31        try
32          for i:= 0 to ptgGroups^.GroupCount - 1 do
33            if EqualSid(psidAdmins, ptgGroups^.Groups[i].Sid) then begin
34              Result:= True;
35              Break;
36            end;
37        finally
38          FreeSid(psidAdmins);
39        end; { End AllocateAndInitializeSid }
40      end;
41    finally
42      FreeMemory(ptgGroups);
43    end; { End ptgGroups }
44  end; { End OpenProcessToken }
45end;