问题 如何在Windows上使用其他用户帐户创建新进程?


是否可以在具有不同用户帐户的Windows上创建新进程?我知道有一个上下文菜单“Run as”但我想用Java做。我有用户名和密码。


10210
2017-12-12 08:20


起源



答案:


你需要使用。编写DLL Java本机接口(JNI) 因为你不能用纯Java代码做到这一点。

DLL本身需要调用 CreateProcessAsUser 用于在另一个用户的上下文中创建进程的函数。要成功创建该进程,您需要为该函数提供一个访问令牌,该函数本身是通过调用该函数创建的 LogonUser的 function(它需要用户名和密码来验证其他用户)。


6
2017-12-12 08:54





有一个名为“runas.exe”的程序。您可以运行该过程并为您的进程和用户名/密码提供适当的参数。我认为这是最简单的方法。


4
2017-12-12 08:22



好主意,但这不起作用,因为你无法将密码传递给runas.exe。密码必须由用户输入。如果重定向进程输入,则runas将终止并显示错误。 - Horcrux7


答案:


你需要使用。编写DLL Java本机接口(JNI) 因为你不能用纯Java代码做到这一点。

DLL本身需要调用 CreateProcessAsUser 用于在另一个用户的上下文中创建进程的函数。要成功创建该进程,您需要为该函数提供一个访问令牌,该函数本身是通过调用该函数创建的 LogonUser的 function(它需要用户名和密码来验证其他用户)。


6
2017-12-12 08:54





有一个名为“runas.exe”的程序。您可以运行该过程并为您的进程和用户名/密码提供适当的参数。我认为这是最简单的方法。


4
2017-12-12 08:22



好主意,但这不起作用,因为你无法将密码传递给runas.exe。密码必须由用户输入。如果重定向进程输入,则runas将终止并显示错误。 - Horcrux7


我刚刚遇到了一个名为MiniRunAs的runas.exe程序的替代程序,该程序将在命令行上获取密码 - http://www.source-code.biz/snippets/c/1.htm

如果您能够将其与应用程序一起安装,那么这可能比编写JNI DLL简单。


2
2018-02-22 05:12





根据您的需要,Win32 API“CreateProcessWithLogonW“比”CreateProcessAsUser / LogonUser“功能更容易使用。

来自MSDN文档:

CreateProcessWithLogonW和CreateProcessWithTokenW函数是
类似于CreateProcessAsUser函数,除了调用者
不需要调用LogonUser函数来验证用户
并得到一个令牌

1
2017-12-20 22:54





RUNAS具有“/ savecred”开关,只允许您第一次输入凭证。一个潜在的问题是,当/ SaveCred保存凭据时,它会在RUNAS调用该用户帐户时保存它。这可能是一个巨大的安全风险,所以要小心使用它!

例子在 http://www.rgagnon.com/javadetails/java-0014.html (最后)


0
2017-12-20 21:41