Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];
ВнизПроверить, имеет ли пользователь права администратора домена Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c