Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Текущий пользователь - администратор   Найти похожие ветки 

 
VladimirVladimirovich   (2005-10-24 18:52) [0]

Здравствуйте.
Как определить, имеет ли текущий пользователь права администратора?

Спасибо!


 
clickmaker ©   (2005-10-24 19:10) [1]

http://www.all-net.ru/Library/Articles/Programming/BaseService/Security/IsUsrAdm/


 
VladimirVladimirovich   (2005-10-24 19:12) [2]


> clickmaker ©   (24.10.05 19:10) [1]

Спасибо за ссылку, сайт хороший.

Вот нашёл ещё пример, уже на Делфи:
const

 SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =

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

 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);

     {$R-}

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

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

       begin

         Result := True;

         Break;

       end;

     {$R+}

     FreeSid(psidAdministrators);

   end;

   FreeMem(ptgGroups);

 end;

end;


 
begin...end ©   (2005-10-24 19:33) [3]

> VladimirVladimirovich   (24.10.05 18:52)

См. в MSDN описание функции IsUserAnAdmin.
Импортируйте её из shell32.dll, и задача решится в одну строчку.


 
VladimirVladimirovich   (2005-10-24 20:24) [4]


> begin...end ©   (24.10.05 19:33) [3]

Спасибо. Действительно всё гораздо проще! Если её импортировать в 9x напишет, что ф-я не найдена?


 
begin...end ©   (2005-10-24 20:27) [5]

> VladimirVladimirovich   (24.10.05 20:24) [4]
> Если её импортировать в 9x напишет, что ф-я не найдена?

Да. Отвечая в [3], я ориентировался на заголовок ветки, где указана XP.


 
begin...end ©   (2005-10-24 20:29) [6]

К тому же, в 9x эта функция и не нужна...
:-)


 
Джо ©   (2005-10-24 20:37) [7]


>  [4] VladimirVladimirovich   (24.10.05 20:24)
>
> > begin...end ©   (24.10.05 19:33) [3]
>
> Спасибо. Действительно всё гораздо проще!

В статье по ссылке в [1] упоминается столь же простая функция IsUserAdmin, находящяяся в setupapi.dll. Так что все еще проще, просто нужно внимательно читать ответы.


 
umbra ©   (2005-10-24 20:41) [8]

Удалено модератором
Примечание: Offtopic


 
begin...end ©   (2005-10-24 20:42) [9]

> Джо ©   (24.10.05 20:37) [7]

IsUserAdmin, в отличие от IsUserAnAdmin, недокументирована в MSDN.


 
VladimirVladimirovich   (2005-10-24 21:04) [10]


> begin...end ©   (24.10.05 20:29) [6]

Ну это само собой, но и ошибка там тоже не нужна. Наверное лучше эту библиотеку динамически подключать... да и специально для NT4 прийдётся всё равно [2] реализовывать.


> umbra ©   (24.10.05 20:41) [8]

А это уже военная тайна )



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.062 c
14-1132177508
Prohodil Mimo
2005-11-17 00:45
2005.12.25
Какая из цифр означает номер лицензии delphi 2005?


3-1131019475
DelphiLexx
2005-11-03 15:04
2005.12.25
Подтвердить транзакцию в процедуре


2-1133888031
Gala_l
2005-12-06 19:53
2005.12.25
kbmMW


2-1133895371
De1uxe
2005-12-06 21:56
2005.12.25
параметр прямоугольника


4-1129803049
Tristania
2005-10-20 14:10
2005.12.25
Вопрос по WH_JOURNALPLAYBACK/WH_JOURNALRECORD хукам