![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверить, имеет ли пользователь права администратора домена [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]
> произвести некое безобидное действо, выполнение которого
> разрешено только администраторам домена
ага, например, запуск этой самой программы.