【发布时间】:2020-07-26 01:16:57
【问题描述】:
我正在创建一个应用程序(名称 AppRunner),它将使用 winapi 运行可执行文件(名称 EXE)。
在 AppRunner 中,我使用 CreateProcessAsUser 来运行 EXE,并且此方法需要一个 hToken(用户令牌)。
当 AppRunner 将在会话 0 中由用户 System 执行时,它将成功获取用户令牌(带有控制台会话 id 的 WTSQueryUserToken),并且一切正常。
但是,当 AppRunner 将在 session>0 中被登录用户执行时,将无法获取用户令牌。
我注意到当使用 hToken=0 调用 CreateProcessAsUser 时,EXE 正在用户会话 (>0) 中的登录用户下执行。
我可以假设用 hToken = 0 调用 CreateProcessAsUser 将在用户会话中的已登录用户下执行 EXE?我在 CreateProcessAsUser 页面中没有找到任何关于它的文档。
谢谢
【问题讨论】:
-
CreateProcessAsUserwith hToken = 0 与CreateProcess具有相同的效果 - 将使用当前进程令牌执行新进程 -
顺便说一句,如果其他人遇到这种情况: CreateProcessAsUser with hToken=0 确实会创建一个与当前进程的用户具有相同用户的进程,但是 CreateEnvironmentBlock 将创建一个具有默认值的环境,这意味着例如 appdata 文件夹将指向默认用户,而不是当前用户的 appdata 文件夹。这对我来说是个大问题