gpt4 book ai didi

c++ - CoCreateInstance 上的 E_ACCESSDENIED,它曾经在这里工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:09 26 4
gpt4 key购买 nike

我有一些代码曾经可以工作,但最近停止了。它位于 Adob​​e Reader 插件中,最新版本的 Reader 具有导致我出现问题的“保护模式”。

我的插件可以加载我的一些正常的 dll,这些 dll 在进程中加载​​:

MyNormalLib::IMyClassPtr foo;
HRESULT hr = foo.CreateInstance(__uuidof(MyNormalLib::MyClass));

但是当我尝试获取指向我的服务的 com 指针时(在同一台机器上运行):

MyOtherLib::IMyServicePtr bar;
HRESULT hr = bar.CreateInstance(__uuidof(MyOtherLib::MyService));

我的 HRESULT 得到 E_ACCESSDENIED

在 Adob​​e Reader X 出现之前,这曾经很好用。在没有保护模式的情况下,Adobe 可以正常运行并且一切正常。在保护模式下,Adobe 会生成另一个 Reader 进程,并对其进行一些限制。使用 Process Explorer 查看这个,我可以看到父 Reader 进程的安全选项卡几乎所有内容都设置为强制;但是子 Reader 进程将大多数组设置为“拒绝,强制”,一些设置为“强制,限制”,有些只是强制。如果这很重要,我可以提供更多详细信息。

所有进程(我的服务和 Reader)都以同一个用户运行——我。如果重要的话,我有管理员权限。

当尝试访问我自己的服务时,什么会导致 AccessDenied 错误?我必须跳过哪些安全环才能让它发挥作用?

最佳答案

受限进程没有管理员权限。这几乎就是练习的重点 - Reader X 从其 token 中删除尽可能多的权限,这样如果它被 pwned,您的计算机就不会。

(这基本上也是 UAC 的工作方式,您必须转到内核以获得权限,以便在禁用管理员组后重新启用它)。

基本上您需要查看 Reader X 拥有的权限,并确保您的组件可以使用这些权限。 Process Monitor 是您的好 helper - 只需过滤 DENIED,问题就会立即出现在您面前!

关于c++ - CoCreateInstance 上的 E_ACCESSDENIED,它曾经在这里工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com