我编写了一个c ++ windows应用程序(A),它使用LogonUser,LoadUserProfile和ImpersonateLoggedOnUser获取另一个用户(Y)的权限。 意味着A开始使用在工作站上登录的用户(X)。如果用户想要提升他的权利,他只需按一个按钮并以另一个用户身份登录,而无需将自己从窗口登出并重新登录。
现在的情况是(根据函数的返回值):LogonUser工作,LoadUserProfile工作,ImpersonateLoggedOnUser工作。
模仿后我开始另一个过程。此过程是需要OCX控件的应用程序(B)。 这失败了,应用程序告诉我.oxc文件没有正确安装。
问题是,如果我直接以登录到机器(X)的用户身份启动B,它就可以工作。 如果我直接以我想要使用A来提升我的权利的用户(Y)启动B,它就可以工作。
如果我以(X)身份登录并在资源管理器中选择“运行为”(Y),则可以正常工作!
您是否知道我需要采取哪些步骤来执行与Windows中的“运行方式”对话框相同的步骤?
答案 0 :(得分:1)
我不确定,但看起来模仿是不够的 - 模拟仅与进程(A)相关,而是尝试使用ProcessAttributes / ThreadAttributes将CreateProcess显式设置为模板用户来自Windows的ACL
答案 1 :(得分:0)
谢谢大家的帮助。
以下能够为我解决问题:
我使用 CreateProcessWithLogonW()启动所需的过程。
为了使该功能正常工作,我必须在调用之前 RevertToSelf(),然后再次进行模拟。
所以序列现在是:
LogonUser()
LoadUserProfile()
ImpersonateLoggedOnUser()
// work with the app
RevertToSelf()
CreateProcessWithLogonW()
// do the impersonation stuff again