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

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


person Horcrux7    schedule 12.12.2008    source источник


Ответы (5)


Вам нужно написать DLL, используя Java Native Interface (JNI), так как вы не можете сделать это с чистым Java-код.

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

person Bananeweizen    schedule 12.12.2008

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

person BobbyShaftoe    schedule 12.12.2008
comment
Хорошая идея, но это не работает, потому что вы не можете передать пароль runas.exe. Пароль должен быть введен пользователем. Если вы перенаправляете ввод процесса, runas завершается с ошибкой. - person Horcrux7; 15.12.2008

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

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

person Matt Sheppard    schedule 22.02.2010

В зависимости от ваших потребностей 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
person user21826    schedule 20.12.2008
comment
Да, но вы должны помнить, что: Windows XP с пакетом обновления 2 (SP2), Windows Server 2003 или более поздней версии: вы не можете вызвать CreateProcessWithLogonW из процесса, работающего под учетной записью LocalSystem, поскольку функция использует SID для входа в токен вызывающей стороны, а токен для учетной записи LocalSystem не содержит этот SID. В качестве альтернативы используйте функции CreateProcessAsUser и LogonUser. - person Green; 06.10.2019

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

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

person RealHowTo    schedule 20.12.2008