返回
从“用户/此帐户”服务启动非零会话中进程:详解常见问题与解决方案
windows
2024-03-18 21:09:47
启动非零会话中进程:使用“用户/此帐户”服务
问题
你有一个以“用户/此帐户”身份运行的服务 (winrshost.exe)。该服务在会话 0 中运行,并使用子进程启动了另一个进程“myproc1.exe”,也在会话 0 中运行。
现在,你想在其他非零会话中启动另一个子进程“myproc2.exe”。这是否可行?
背景
目前,网上讨论该主题的所有链接都针对“系统”帐户中的服务。然而,你的服务是以“用户/此帐户”身份运行的。
尝试的解决方案
你尝试了以下方法来更改会话 ID:
-
方法 1:更改 TokenSessionId
- 调用 SetTokenInformation API 成功更改了 TokenSessionId。
- 调用 CreateProcessAsUserW API 失败,错误为 '5' (ERROR_ACCESS_DENIED)。
-
方法 2:不更改 TokenSessionId
- 进程在会话 0 中启动。
问题原因
方法 1
- 服务是以“用户/此帐户”身份运行的。
- 你没有获得更改会话 ID 所需的权限。
方法 2
- 进程在会话 0 中启动。
可能的解决方案
尝试 1:修改服务权限
- 确保你的服务具有以下权限:
- 调试权限
- 调整会话 ID 的权限
- 在提升的命令提示符中,运行以下命令:
sc config "你的服务名称" debug
尝试 2:使用 Windows 附加服务 API
- 在你的服务中使用 Windows 附加服务 API。
- 这些 API 可以让你访问更广泛的权限,包括更改会话 ID。
限制
- 使用此方法有一些限制:
- 服务必须以“本地系统”帐户运行。
- 进程只能在本地计算机上启动。
注意事项
- 修改服务权限或使用 Windows 附加服务 API 可能需要对你的系统进行高级更改。
- 在做出任何更改之前,请仔细考虑潜在的风险并咨询合格的 IT 专业人员。
结论
启动非零会话中的进程时,以“用户/此帐户”身份运行的服务面临独特的挑战。通过修改服务权限或使用 Windows 附加服务 API,你可以克服这些挑战并获得启动非零会话中进程所需的权限。
常见问题解答
- 我需要使用什么方法才能启动非零会话中的进程?
- 使用方法 1 或方法 2,具体取决于你的服务权限和对进程启动位置的限制。
- 使用 Windows 附加服务 API 有什么限制?
- 服务必须以“本地系统”帐户运行,进程只能在本地计算机上启动。
- 是否需要重启服务才能应用权限更改?
- 是,在修改服务权限或使用 Windows 附加服务 API 之后,需要重启服务才能应用更改。
- 我是否可以从非零会话中终止会话 0 中的进程?
- 可以,但需要获得 SE_TCB_NAME 和 SE_ASSIGNPRIMARYTOKEN_NAME 特权。
- 是否可以通过其他方式启动非零会话中的进程?
- 是,还有其他方法,例如使用 Windows 管理工具箱或第三方库。