小编RAZ*_*Taz的帖子

幽灵/崩溃补丁导致COM方法返回E_ACCESSDENIED

我正在开发一个大量使用COM的项目,新的Spectre/Meltdown补丁毫无疑问地搞乱了程序中的通信.

我怎么知道?我重新映像了一台Windows机器(2017年5月),这个补丁不存在.我安装了我的程序,一切都按预期工作.然后我下载了所有必需的更新.该计划不再有效.然后,我仅卸载了Meltdown/Spectre补丁(2018-01基于x64的系统的Windows 10版本1507的累积更新(KB4056893)),程序恢复正常行为.

我将调试器连接到我的程序并将其追溯到这段代码.

INvRtrControl4Itf * poRouterControl = GetNvRtrControl4();
if(poRouterControl)
{
    //the following line of code always returns E_ACCESSDENIED
    HRESULT hr = poRouterControl->GetXPTExtendedInfoForOutputs(lNumPorts, poOutputPorts, poXPTAndLPRInfo, peStatus);
    if(FAILED(hr))
    {
        ConnectToRouterControl();
        poRouterControl->Release();
        return hr;
    }
    poRouterControl->Release();
}
Run Code Online (Sandbox Code Playgroud)

未修补系统上的Windows调试器:

poRouterControl->GetXPTExtendedInfoForOutputs returns S_OK
Run Code Online (Sandbox Code Playgroud)

修补系统上的Windows调试程序:

poRouterControl->GetXPTExtendedInfoForOutputs returns E_ACCESSDENIED
Run Code Online (Sandbox Code Playgroud)

我有一个COM服务器A尝试与COM服务器B通信,两者都具有相同的权限(SYSTEM).在PATCHED系统上,当A从COM接口INvDevControl2Itf调用方法时,服务器B调用该方法而没有错误.当同一服务器A尝试从进程B上的不同接口INvRtrControl4Itf调用方法时,将返回E_ACCESSDENIED,并且我从未遇到过COM接口.在UN-PATCHED系统上,一切都按预期工作.

有没有人用COM和新的Spectre/Meltdown补丁遇到这个问题?我将继续寻找原因,但相同的确切代码运行完全没有安装补丁.但是,客户最终会想要更新他们的系统,因此我不建议也不要告诉他们永远不要安装补丁.

windows com patch visual-studio visual-c++

7
推荐指数
1
解决办法
619
查看次数

标签 统计

com ×1

patch ×1

visual-c++ ×1

visual-studio ×1

windows ×1