Is user Administrator

How to determine if the current user is logged in as an administrator. Author unknown.

const

  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =

    (Value: (0, 0, 0, 0, 0, 5));

const

  SECURITY_BUILTIN_DOMAIN_RID = $00000020;

  DOMAIN_ALIAS_RID_ADMINS = $00000220;

function IsAdmin: Boolean;

var

  hAccessToken: THandle;

  ptgGroups: PTokenGroups;

  dwInfoBufferSize: DWORD;

  psidAdministrators: PSID;

  x: Integer;

  bSuccess: BOOL;

begin

  Result := False;

  bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,

    hAccessToken);

  if not bSuccess then

  begin

    if GetLastError = ERROR_NO_TOKEN then

    bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,

      hAccessToken);

  end;

  if bSuccess then

  begin


    GetMem(ptgGroups, 1024);

    bSuccess := GetTokenInformation(hAccessToken, TokenGroups,

      ptgGroups, 1024, dwInfoBufferSize);

    CloseHandle(hAccessToken);

    if bSuccess then

    begin

      AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,

        SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,

        0, 0, 0, 0, 0, 0, psidAdministrators);

      for x := 0 to ptgGroups.GroupCount - 1 do

        if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then

        begin

          Result := True;

          Break;

        end;

      FreeSid(psidAdministrators);

    end;

    FreeMem(ptgGroups);

  end;

end;


 

Share this article!

Follow us!

Find more helpful articles: