首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImpersonateLoggedOnUser并启动使用ocx的新进程失败。

ImpersonateLoggedOnUser并启动使用ocx的新进程失败。
EN

Stack Overflow用户
提问于 2009-09-01 07:11:10
回答 2查看 3.5K关注 0票数 2

我编写了一个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中的“运行方式”对话框相同的操作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-02 10:55:49

感谢大家的帮助。下面的代码可以帮我解决这个问题:

我使用CreateProcessWithLogonW().启动所需的进程为了让这个函数正常工作,我必须在调用它之前执行RevertToSelf(),然后在调用之后再次执行模拟。

因此,现在的顺序是:

代码语言:javascript
复制
LogonUser()
LoadUserProfile()
ImpersonateLoggedOnUser()
// work with the app
RevertToSelf()
CreateProcessWithLogonW()
// do the impersonation stuff again
票数 0
EN

Stack Overflow用户

发布于 2009-09-01 07:27:34

我不确定,但看起来模拟还不够-模拟只与进程(A)相关,而不是尝试从windows的ACL中将进程属性/线程属性显式设置为模拟用户的CreateProcess

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1360974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档