首页 > 解决方案 > 将 JobObject 分配给从 SYSTEM 服务启动的具有非零会话 id 的进程

问题描述

我有一个 Windows SYSTEM 服务,它需要在登录用户的上下文中启动一个新进程。除此之外,我需要为具有一定限制的新流程创建一个作业。

我正在提取 explorer.exe 的进程令牌并将其复制以创建主令牌。我使用这个令牌CreateProcessAsUser来创建在用户上下文中运行的新进程,会话 id 非零。当我将作业分配给此进程时,AssignProcessToJobObject功能失败并出现访问被拒绝错误。具体来说,我无法设置JOBOBJECT_BASIC_UI_RESTRICTIONS限制(JOBOBJECT_EXTENDED_LIMIT_INFORMATION虽然有效)。

该进程被创建为挂起,在分配作业后,我正在恢复线程。

当我使用当前进程的令牌(即会话 id 为 0 的 SYSTEM 服务)而不是 explorer.exe 时,一切正常。

我正在 Windows 10 上测试这个

标签: c++windowsservicesessionidcreateprocessasuser

解决方案


推荐阅读