繁体   English   中英

CreateProcessAsUser hToken 为零

[英]CreateProcessAsUser hToken is zero

我正在创建一个应用程序(名称 AppRunner),它将使用 winapi 运行可执行文件(名称 EXE)。

在 AppRunner 中,我使用 CreateProcessAsUser 来运行 EXE,并且此方法需要一个 hToken(用户令牌)。

当 AppRunner 将由 session 0 中的用户系统执行时,它将成功获取用户令牌(带有控制台 session id 的 WTSQueryUserToken),一切都会正常工作。
但是,当 AppRunner 将由 session>0 中的登录用户执行时,将无法获取用户令牌。

我注意到,当使用 hToken=0 调用 CreateProcessAsUser 时,EXE 正在用户 session (>0) 中的登录用户下执行。

我可以假设使用 hToken = 0 调用 CreateProcessAsUser 将在用户的 session 中的登录用户下执行 EXE吗? 我在 CreateProcessAsUser 页面中没有找到任何关于它的文档。

谢谢

顺便说一句,万一其他人遇到这种情况:使用 hToken=0 的 CreateProcessAsUser 确实会创建一个与当前进程的用户具有相同用户的进程,但是 CreateEnvironmentBlock 将创建一个具有默认值的环境,这意味着例如 appdata 文件夹将指向默认用户,而不是当前用户的 appdata 文件夹。 这对我来说是个大问题

两种解决方法:

  1. 调用CreateEnvironmentBlock时继承父进程的 (AppRunner) 环境。 然后APPDATA环境变量将指向当前用户的 appdata 文件夹。 但是USERPROFILE仍然指向C:\Users\Default
  2. 使用GetCurrentProcessToken获取父进程的 (AppRunner) 令牌,然后将此令牌传递给CreateEnvironmentBlock 然后APPDATAUSERPROFILE环境变量都指向当前用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM