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

Вниз

Проверить, имеет ли пользователь права администратора домена   Найти похожие ветки 

 
RuCosinus   (2010-08-12 18:17) [0]

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

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

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


 
KilkennyCat ©   (2010-08-12 18:21) [1]


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

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


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

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

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


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


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

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


 
KilkennyCat ©   (2010-08-12 18:25) [4]

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


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

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


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


> KilkennyCat ©

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


 
KilkennyCat ©   (2010-08-12 18:31) [7]

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


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

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

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 19:02) [9]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1280041741
Loginov Dmitry
2010-07-25 11:09
2010.11.07
Пишем свой wysiwyg HTML-редактор


2-1281957561
mm0
2010-08-16 15:19
2010.11.07
MemoryStream в потоке


15-1280332456
Baks
2010-07-28 19:54
2010.11.07
Как правильно разбить строку?


15-1280386453
бумбум
2010-07-29 10:54
2010.11.07
Имеет смысл ADOConnection1.Open ?


2-1281596062
kukuikar
2010-08-12 10:54
2010.11.07
Drag&Drop