• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Как Проверить, Имеем Ли Мы Права Администратора В Системе?

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,562
Баллы
155
Как проверить, имеем ли мы права администратора в системе?
Код:
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;
 
Вверх Снизу