Как я могу создать новый процесс с другой учетной записью пользователя в Windows? - PullRequest
11 голосов
/ 12 декабря 2008

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

Ответы [ 5 ]

6 голосов
/ 12 декабря 2008

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

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

4 голосов
/ 12 декабря 2008

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

2 голосов
/ 22 февраля 2010

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

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

1 голос
/ 21 декабря 2008

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

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

The CreateProcessWithLogonW and CreateProcessWithTokenW functions are
similar to the CreateProcessAsUser function, except that the caller 
does not need to call the LogonUser function to authenticate the user 
and get a token
0 голосов
/ 21 декабря 2008

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

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

...