C++ E_ACCESSDENIED在CoCreateInstance上,它曾经在那里工作

C++ E_ACCESSDENIED在CoCreateInstance上,它曾经在那里工作,c++,com,adobe-reader,hresult,C++,Com,Adobe Reader,Hresult,我有一些以前可以工作的代码,但最近停止了。它在Adobe Reader插件中,最新的Reader版本有一个“受保护模式”,这导致了我的问题 我的插件可以加载我的一些普通DLL,这些DLL会加载进程中的: MyNormalLib::IMyClassPtr foo; HRESULT hr = foo.CreateInstance(__uuidof(MyNormalLib::MyClass)); 但当我尝试获取指向我的服务(在同一台机器上运行)的com指针时: 对于我的HRESULT,我获得了E\u

我有一些以前可以工作的代码,但最近停止了。它在Adobe Reader插件中,最新的Reader版本有一个“受保护模式”,这导致了我的问题

我的插件可以加载我的一些普通DLL,这些DLL会加载进程中的:

MyNormalLib::IMyClassPtr foo;
HRESULT hr = foo.CreateInstance(__uuidof(MyNormalLib::MyClass));
但当我尝试获取指向我的服务(在同一台机器上运行)的com指针时:

对于我的HRESULT,我获得了
E\u访问被拒绝

在AdobeReaderX出现之前,它一直工作得很好。没有保护模式,Adobe可以正常运行,一切正常。在受保护模式下,Adobe生成另一个Reader进程,但有一些限制。通过Process Explorer查看这一点,我可以看到父读取器进程的安全选项卡几乎将所有内容都设置为必填项;但是儿童读取器进程将大多数组设置为“拒绝,强制”,一些设置为“强制,限制”,一些设置为强制。如果这很重要,我可以提供更多细节

所有进程(我的服务和两个读卡器)都作为同一个用户(我)运行。我有管理权,如果这很重要的话


当尝试访问我自己的服务时,什么会导致AccessDenied错误?我必须通过哪些安全措施才能使其正常工作?

受限制的进程没有管理员权限。这正是练习的要点——Reader X从其令牌中删除尽可能多的权限,这样,如果它被屏蔽,您的计算机就不会被屏蔽

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


基本上,您需要查看Reader X的priv,并确保您的组件可以使用这些权限。Process Monitor是您的朋友-只需过滤拒绝,问题就会立即出现在您身上

您是否编写了COM服务器的代码?它是进程内服务器还是进程外服务器?@sharptooth-out-proc-COM服务器,我想。谢谢,这很有帮助。对于过程监控,应该拒绝哪些类别?我什么也没看见。我让它显示ProcessName=AcroRd32中的所有内容,这显示了80条消息,但它们都是Result=
SUCCESS
(除了少数未找到名称的消息)。您可以在process monitor下选择许多列,您需要结果。
MyOtherLib::IMyServicePtr bar;
HRESULT hr = bar.CreateInstance(__uuidof(MyOtherLib::MyService));