Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверить, имеет ли пользователь права администратора домена [D7, XP, 2003]


RuCosinus ©   (2010-08-12 18:17:00) 

Добрый вечер.

Есть некий сетевой диск, на котором лежит некая программа. При запуске она должна проверять, является ли запустивший пользователь администратором домена в котором запустили приложение.

Если я правильно понимаю, то для этого можно попробовать произвести некое безобидное действо, выполнение которого разрешено только администраторам домена, и смотреть исключения.
Подскажите, правильно ли я думаю и какое действие нужно поробовать выполнить?


KilkennyCat   (2010-08-12 19:02:00) [1]

http://msdn.microsoft.com/en-us/library/bb756929.aspx


RuCosinus   (2010-08-12 18:43:00) [2]

Я вот такое нашел, вроде работает... А манифестом - это как, не расскажите?

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
x: integer;
bSuccess: BOOL;
hAccessToken: THandle;
ptgGroups: PTokenGroups;
dwInfoBufferSize: DWORD;
psidAdministrators: PSID;
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;


KilkennyCat   (2010-08-12 18:31:00) [3]

а... ну тогда манифестом можно.


RuCosinus   (2010-08-12 18:29:00) [4]


> KilkennyCat ©

А.. Я понял. Нет, там смысл в другом - если админ, то добавляются некоторые функции, обычным пользователям недоступные.


KilkennyCat   (2010-08-12 18:27:00) [5]

да и ваще, расшарить диск можно только для админов.


KilkennyCat   (2010-08-12 18:25:00) [6]

какая разница, где она лежит? если так считать, то я на флэшке могу таскать кучу утилит, типа регедит, и пофиг, что я не админ, да?


RuCosinus   (2010-08-12 18:23:00) [7]


> KilkennyCat ©   (12.08.10 18:21) [1]

Не, программа лежит на расшаренном для всех диске )


RuCosinus   (2010-08-12 18:22:00) [8]

Как всегда, ищешь, ищешь и ничего... Стоит огласить вопрос, как все волшебным образом появляется.

Прошу прощения, все нашел.


KilkennyCat   (2010-08-12 18:21:00) [9]


> произвести некое безобидное действо, выполнение которого
> разрешено только администраторам домена

ага, например, запуск этой самой программы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо