Как я могу создать новый процесс с другой учетной записью пользователя в Windows?

Можно ли создать новый процесс в Windows с другой учетной записью пользователя? Я знаю, что есть контекстное меню "Запуск от имени", но я хочу сделать это из Java. У меня есть имя пользователя и пароль.

5 ответов

Решение

Вам нужно написать DLL, используя собственный интерфейс Java (JNI), поскольку вы не можете сделать это с помощью чистого кода Java.

Сама DLL должна вызывать функцию CreateProcessAsUser, чтобы создать процесс в контексте другого пользователя. Чтобы успешно создать этот процесс, вам нужно предоставить токен доступа к функции, которая сама была создана путем вызова функции LogonUser (для аутентификации этого другого пользователя требуются имя пользователя и пароль).

Есть программа под названием "runas.exe". Вы можете запустить этот процесс и предоставить соответствующие аргументы для вашего процесса и имя пользователя / пароль. Я думаю, что это самый простой метод.

Я только что наткнулся на альтернативу программе runas.exe под названием MiniRunAs, которая примет пароль в командной строке - http://www.source-code.biz/snippets/c/1.htm

Если вы можете установить его вместе со своим приложением, это может оказаться проще, чем написание JNI DLL.

В зависимости от ваших потребностей Win32 API " CreateProcessWithLogonW" проще в использовании, чем функции "CreateProcessAsUser / LogonUser".

Из документов MSDN:

Функции CreateProcessWithLogonW и CreateProcessWithTokenW
похож на функцию CreateProcessAsUser, за исключением того, что вызывающий 
не нужно вызывать функцию LogonUser для аутентификации пользователя 
и получить токен

RUNAS имеет переключатель "/savecred", который позволяет вводить учетные данные только в первый раз. Одна потенциальная проблема заключается в том, что когда /SaveCred сохраняет учетные данные, он сохраняет их при каждом запуске RUNAS этой учетной записи пользователя. Это может быть огромным риском для безопасности, поэтому будьте осторожны при его использовании!

Пример на http://www.rgagnon.com/javadetails/java-0014.html (в конце)

Другие вопросы по тегам