我编写了一个c++ windows应用程序(A),它使用LogonUser、LoadUserProfile和ImpersonateLoggedOnUser来获得另一个用户的权限(Y)。这意味着A开始使用登录到工作站(X)的用户。如果用户想要提升他的权限,他只需按下一个按钮,以另一个用户的身份登录,而不必将自己从窗口注销并重新登录。
现在的情况是(根据函数的返回值):LogonUser工作,LoadUserProfile工作,ImpersonateLoggedOnUser也工作。
在模拟之后,我启动了另一个进程。此进程是一个需要OCX控件的应用程序(B)。此操作失败,应用程序告诉我.oxc文件未正确安装。
问题是,如果我以登录到机器(X)的用户身份直接启动B,它就可以工作。如果我以用户(Y)的身份直接启动B,我希望使用A将我的权限提升到该用户(Y),它可以工作。
如果我以(X)的身份登录,并在浏览器中选择"run as“(Y),它就可以工作了!
您知道我需要执行哪些步骤才能完成与windows中的“运行方式”对话框相同的操作吗?
发布于 2009-09-02 10:55:49
感谢大家的帮助。下面的代码可以帮我解决这个问题:
我使用CreateProcessWithLogonW().启动所需的进程为了让这个函数正常工作,我必须在调用它之前执行RevertToSelf(),然后在调用之后再次执行模拟。
因此,现在的顺序是:
LogonUser()
LoadUserProfile()
ImpersonateLoggedOnUser()
// work with the app
RevertToSelf()
CreateProcessWithLogonW()
// do the impersonation stuff again发布于 2009-09-01 07:27:34
我不确定,但看起来模拟还不够-模拟只与进程(A)相关,而不是尝试从windows的ACL中将进程属性/线程属性显式设置为模拟用户的CreateProcess
https://stackoverflow.com/questions/1360974
复制相似问题