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

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

12.12.2008 08:20:08
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

6
12.12.2008 08:54:02

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

4
12.12.2008 08:22:54
Хорошая идея, но это не работает, потому что вы не можете передать пароль runas.exe. Пароль должен быть введен пользователем. Если вы перенаправите ввод процесса, runas завершатся с ошибкой.
Horcrux7 15.12.2008 13:42:48

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

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

0
20.12.2008 21:41:34

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

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

Функции CreateProcessWithLogonW и CreateProcessWithTokenW
похож на функцию CreateProcessAsUser, за исключением того, что вызывающий 
не нужно вызывать функцию LogonUser для аутентификации пользователя 
и получить токен
1
20.12.2008 22:54:09
Да, но вы должны помнить, что: «Windows XP с пакетом обновления 2 (SP2), Windows Server 2003 или более поздней версии: нельзя вызвать CreateProcessWithLogonW из процесса, который выполняется под учетной записью« LocalSystem », поскольку функция использует идентификатор входа в систему в маркере вызывающего абонента, и токен для учетной записи «LocalSystem» не содержит этот SID. В качестве альтернативы используйте функции CreateProcessAsUser и LogonUser. "
Green 6.10.2019 11:29:30

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

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

2
22.02.2010 05:12:34