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

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

{Определение "под кем" запущена программа}
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;