我有一个系统服务,它以管理员身份创建了一个帮助交互进程,以便它可以访问一些与桌面相关的资源,包括 BlockInput() 函数和 NVIDIA 的 NVAPI 函数,它们不能从服务运行。当登录的用户是管理员的成员时,以下工作:
- 设置权限级别,包括 SE_TCB_NAME
- 使用 WTSGetActiveConsoleSessionId() 获取活动会话 ID
- 使用 WTSQueryUserToken() 从会话 ID 获取登录用户
- GetTokenInformation() 与 TokenLinkedToken
- 带有 SecurityImpersonation 的 DuplicateTokenEx()
- 使用 CreateProcessAsUser() 启动进程
但是,当我让当前登录会话成为标准用户而不是管理员时,步骤 4. 失败,大概是因为标准用户没有与其链接的管理级别令牌。这里有什么解决方案?我假设我需要获取其中一位管理员用户的令牌,但我该怎么做呢?如果该用户不是登录用户,它是否仍然可以访问与当前桌面交互的功能?