![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск команды от имени другого пользователя [D6, Win2k]
Manulo © (2004-05-31 21:10:00)Задача тривиальна. Программа расчитана на работу в вин 2000 под опытным пользователем. Возникает необходимость запустить некоторую команду, выполнить которую может только администратор.
Выход: используем командуrunas.
Но! Тут начинается ступор! В параметрах команды указывается только учётная запись админа, а пароль нужно вводить попозже, во время выполнения команды. Естественно вводить его с клавиатуры никто не собирается.
Вопрос: Чё делать?
Игорь Шевченко (2004-06-01 10:59:00) [1]CreateProcessWithLogonW. Я уже столькораз постил код примера, что больше не буду. Поиск спасет
evvcom (2004-06-01 08:33:00) [2]
> насколько я знаю, в том случае, когда машина не входит в
> домен - именем домена является имя компьютера
А когда входит в домен, то пользователь может войти в любой из этих доменов (локальная машина или сетевой домен). Для каждого из этих доменов определены свои пользователи, в том числе и администраторы.
Piter (2004-06-01 00:20:00) [3]Manulo (31.05.04 21:10)
Вопрос: Чё делать?
есть функцияCreateProcessAsUser
Cobalt (2004-05-31 23:07:00) [4]Извиняюсь - эти данные были получены опытным путём, при попытке логина дома и на работе.
А вообще,
lpszDomain
Pointer to a null-terminated string that specifies the domain or server to log on to. If this parameter is ".", LogonUser searches only the local account database for the account specified in lpszUsername. If this parameter is NULL, LogonUser searches the local account database, and then searches trusted domain account databases, until it finds the lpszUsername account or the search is exhausted without finding the account name.
Также есть мысль брать имя домена у текущего пользователя.
Cobalt (2004-05-31 22:56:00) [5]насколько я знаю, в том случае, когда машина не входит в домен - именем домена является имя компьютера.
Иначе - имя домена, в который она входит.
Manulo (2004-05-31 22:09:00) [6]2 модератор: Звыняй, ветки попутал :)
Соббсно нарыл такое:
if LogonUser('admin','domain','passwrd',LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then
ImpersonateLoggedOnUser(hToken);
WinExec('route delete 0.0.0.0 ',SW_SHOW);
RevertToSelf;//Возвращаем процессу прежний контекст
CloseHandle(hToken);//Освобождаем дескриптор контекста
Возник встречный вопрос: Как определить имя домена? Не компилить же каждый раз под каждую машину