Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size
Главная Статьи Windows Как проверить, имеем ли мы права администратора в системе?

Как проверить, имеем ли мы права администратора в системе?

Оцените материал
(1 Голосовать)

Как проверить, имеем ли мы права администратора в системе?

function IsAdmin: boolean;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = ( Value: ( 0, 0, 0, 0, 0, 5 ) );
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS = $00000220;
var
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  i: 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 );
         {$R-}
         for i := 0 to ptgGroups.GroupCount-1 do
         if EqualSid( psidAdministrators, ptgGroups.Groups[i].Sid ) then
         begin
            Result := true;
            Break;
         end;
         {$R+}
         FreeSid( psidAdministrators );
      end;
      FreeMem( ptgGroups );
   end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   case IsAdmin of
      true: ShowMessage( 'У нас есть права администратора' );
      false: ShowMessage( 'У нас нет прав администратора' );
   end;
end;
Прочитано 8145 раз

Авторизация



Счетчики