我正在创建一个应用程序(名称AppRunner),它将使用winapi运行一个可执行文件(名称EXE)。
在AppRunner中,我使用CreateProcessAsUser来运行EXE,该方法使用hToken (用户令牌)。
当用户系统在会话0中执行AppRunner时,它将成功地获取用户令牌(带有控制台会话id的WTSQueryUserToken),一切都将正常工作。
但是,当AppRunner将由在session>0中登录的用户执行时,它将无法获得用户令牌。
我注意到,当使用CreateProcessAsUser调用hToken=0时,在用户会话中登录的用户下执行EXE (>0)。
我可以假设使用hToken =0调用CreateProcessAsUser将在用户会话中登录的用户下执行EXE吗?我在CreateProcessAsUser页面中没有找到任何有关它的文档。
谢谢
发布于 2020-04-14 06:15:41
BTW,如果其他人遇到这种情况: CreateProcessAsUser with hToken=0确实将创建一个与当前进程的用户相同的进程,但是,CreateEnvironmentBlock将创建一个具有默认值的环境,这意味着,例如,appdata文件夹将指向默认用户,而不是当前用户的appdata文件夹。
有两个解决办法:
CreateEnvironmentBlock时继承父进程(AppRunner)环境。然后,APPDATA环境变量将指向当前用户的appdata文件夹。但是USERPROFILE仍然使用GetCurrentProcessToken指向USERPROFILE父进程(AppRunner)令牌,然后将此令牌传递给CreateEnvironmentBlock。然后APPDATA和USERPROFILE环境变量都指向当前用户.https://stackoverflow.com/questions/61188590
复制相似问题