C++ QueryInterface在CoCreateInstanceEx成功后返回E_ACCESSDANIED general access denied错误

C++ QueryInterface在CoCreateInstanceEx成功后返回E_ACCESSDANIED general access denied错误,c++,com,dcom,C++,Com,Dcom,我正在制作一个简单的客户端,通过虚拟机上的DCOM连接到OPC服务器。 我在Windows7机器上测试了相同的代码,它工作正常,但在将代码移动到Windows10后,它停止工作(包含DCOM服务器的虚拟机是相同的)。 关键是我能够实例化COM对象,但是我不能调用它的任何方法,因为我正在接收E_ACCESSDENIED结果。 以下是步骤: tagMULTI_QI res; res.pIID = &__uuidof(IOPCServer); res.pItf = NULL; hr = Co

我正在制作一个简单的客户端,通过虚拟机上的DCOM连接到OPC服务器。 我在Windows7机器上测试了相同的代码,它工作正常,但在将代码移动到Windows10后,它停止工作(包含DCOM服务器的虚拟机是相同的)。 关键是我能够实例化COM对象,但是我不能调用它的任何方法,因为我正在接收E_ACCESSDENIED结果。 以下是步骤:

tagMULTI_QI res;
res.pIID = &__uuidof(IOPCServer);
res.pItf = NULL;

hr = CoCreateInstanceEx(
    clsid,
    NULL,
    CLSCTX_INPROC_SERVER,
    &sin,
    1,
    &res);
这将返回hr=S_OK,res.hr也有S_OK值。 但在此之后,任何调用都会检索E_ACCESSDENIED结果。 这是:

hr = server->GetStatus(&status);

IOPCItemProperties* ItemProperties;

hr = server->QueryInterface(
            __uuidof(IOPCItemProperties),
            (void**)&ItemProperties);

知道是什么导致了这个问题吗?可能与Windows 10操作系统有关吗?

什么是
服务器
,如果与
CoCreateInstanceEx
调用有什么关系?你说你想使用DCOM连接到另一台机器,但你正在将
CLSCTX\u INPROC\u服务器
传递到
CoCreateInstanceEx
。这不可能实例化远程服务器。@Igor非常感谢您的支持。CoCreateInstanceEx运行良好,无论我使用CLSCTX_INPROC_服务器还是CLSCTX_REMOTE_服务器,结果都是S_OK,但在获得服务器实例后,任何调用都会返回E_ACCESSDENIED结果。服务器是运行在Windows Xp计算机上的OPC服务器,DCOM配置正确。关键是相同的代码在Windows 7计算机上工作,但在Windows 10计算机上不工作。如果相互通信的计算机具有不同的Windows版本,则可能还必须更改一些注册表设置:例如,这些设置:“网络安全:LAN Manager身份验证级别”。NTLM身份验证级别应设置为:“发送LM&NTLM-如果协商使用NTLMv2会话安全”“网络安全:基于NTLM SSP(包括安全RPC)的客户端的最低会话安全。设置为“需要128位加密”“网络安全:基于NTLM SSP(包括安全RPC)的服务器的最低会话安全。”。