c++ - ImpersonateLoggedOnUser 并启动使用 ocx 的新进程失败

标签 c++ winapi com ocx

我编写了一个 C++ Windows 应用程序 (A),它使用 LogonUser、LoadUserProfile 和 ImpersonateLoggedOnUser 来获得另一个用户 (Y) 的权限。 这意味着 A 开始使用登录到工作站 (X) 的用户。如果用户想要提升他的权限,他只需按一个按钮并以另一个用户身份登录,而无需退出窗口并重新登录。

现在的情况是(根据函数的返回值):LogonUser 有效,LoadUserProfile 有效,ImpersonateLoggedOnUser 也有效。

模拟之后我开始另一个进程。这个进程是一个需要OCX控件的应用程序(B)。 这失败了,应用程序告诉我 .oxc 文件没有正确安装。

问题是,如果我以登录到机器 (X) 的用户身份直接启动 B,它就可以工作。 如果我直接以用户 (Y) 的身份启动 B,我想使用 A 将我的权限提升到该用户,它就可以工作。

如果我以 (X) 身份登录并在资源管理器中选择“运行方式”(Y),它会起作用!

您知道我需要执行哪些步骤才能执行与 Windows 中的“运行方式”对话框相同的操作吗?

最佳答案

我不确定,但看起来模拟还不够 - 模拟仅与进程 (A) 相关,而是尝试将 ProcessAttributes/ThreadAttributes 显式设置为来自 Windows 的 ACL 的模拟用户的 CreateProcess

关于c++ - ImpersonateLoggedOnUser 并启动使用 ocx 的新进程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360974/

相关文章:

c++ - 如何使用 fork 和 execv 获取程序的 pid

c++ - 绑定(bind)抛出异常的函数时,boost::bind 在 VC++ 2010 中不起作用

c++ - Microsoft Visual C++、Visual Studio,如何修复错误 : identifier "GetAsyncKeyState" is undefined

c++ - 将 std::exception 转换为 EXCEPTION_POINTERS

C++ COM ATL DLL

c++ - 如何在自定义 OleDB 驱动程序中显示浏览按钮

c++ - 用小于迭代器之间的比较遍历 std::map

c++ - SSE 版本的不同结果

windows - 在 Delphi 中下载文件

c++ - DISPID_VALUE 对于从脚本调用 IDispatch 是否可靠?