- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我从事一个大量使用 COM 的项目,而新的 Spectre/Meltdown 补丁无疑会干扰程序内的通信。
我怎么知道?我重新镜像了不存在此补丁的 Windows 机器(2017 年 5 月)。我安装了我的程序,一切都按预期工作。然后我下载了所有必需的更新。该程序不再起作用。然后我只卸载了 Meltdown/Spectre 补丁(2018 年 1 月 1 日针对基于 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();
}
未修补系统上的 Windows 调试器:
poRouterControl->GetXPTExtendedInfoForOutputs returns S_OK
已修补系统上的 Windows 调试器:
poRouterControl->GetXPTExtendedInfoForOutputs returns E_ACCESSDENIED
我有一个 COM 服务器 A 试图与 COM 服务器 B 通信,两者都具有相同的权限 (SYSTEM)。在 PATCHED 系统上,当 A 从 COM 接口(interface) INvDevControl2Itf 调用方法时,服务器 B 调用该方法时不会出错。当同一台服务器 A 尝试从进程 B 上的不同接口(interface) INvRtrControl4Itf 调用方法时,将返回 E_ACCESSDENIED 并且我从未通过 COM 接口(interface)。在 UN-PATCHED 系统上,一切正常。
有没有人在使用 COM 和新的 Spectre/Meltdown 补丁时遇到过这个问题?我将继续寻找原因,但相同的代码在没有安装补丁的情况下运行得非常好。但是,客户最终会想要更新他们的系统,所以我不推荐也不想告诉他们永远不要安装补丁。
最佳答案
在 Windows Support Page on the Patch Itself 的帮助下,我能够通过更改我的 COM 服务的 CoInitializeSecurity() 方法调用中的一些代码来解决 COM 服务无法调用 GetXPExtendedInfoForOutputs 方法的问题
hRes = CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_NONE,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL);
到
hRes = CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_CALL, //<----------- changed
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL);
虽然它解决了这个问题,但有些接口(interface)在原始代码中工作得非常好,而其他接口(interface)如 INvRtrControl4Itf 则失败了,这有点令人不安。此外,我不需要更改正在与之通信的其他 COM 服务中的 CoInitializeSecurity 方法初始化,只需要更改调用者 COM 服务。其他 COM 服务仍然可以使用 RPC_C_AUTHN_LEVEL_NONE 初始化,并且我的程序可以像以前一样工作。
但是,我确实将所有 CoInitializeSecurity 方法调用更改为使用 RPC_C_AUTHN_LEVEL_CALL,这应该可以减少 future E_ACCESSDENIED 错误结果的可能性。不幸的是,现在对 RPC 服务器的每次调用都需要身份验证,我假设我的程序的性能可能会受到一点影响。我怀疑这会引起什么问题。
也许这就是为什么有些人在使用 Spectre/Meltdown 补丁更新他们的系统时注意到性能下降的原因......只是一个想法。
关于windows - Spectre/Meltdown 补丁导致 COM 方法返回 E_ACCESSDENIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48231773/
我正在尝试在站点列表中添加站点名称,以便在 publish:end:remote 上清除 HTML 缓存事件。 mysite 但是,它没有按预期工
我正在尝试使用不同目录中的多个文件制作补丁。我不想包含所有未提交的文件,因为我有很多不适用于补丁。 我知道这个命令可以使用特定文件创建补丁,唯一的问题是这是一个文件: svn diff -up ori
我经常使用 gnu-utils 补丁和差异。使用 git,我经常这样做: git diff 通常简单的更改会创建一个大补丁,因为唯一的更改是,例如,添加一个 if/else 循环,并且里面的所有内容都
我使用命令(从 ~ 执行)生成了一个 diff.txt 文件: diff -r /full/path/to/directory/A /full/path/to/directory/B > diff.t
我正在编写一个项目,我需要通过网络传输一组相似的图像。为了加快速度,我考虑过做大多数电影编解码器所做的事情。有关键帧,然后发送更改。 现在,我得到的是一组 BufferedImage,因此类似于文本文
我正在尝试将更改拆分为多个提交,但在手动编辑大块时我遇到了问题。 原始大块头: @@ -116,8 +116,8 @@ context context -
我想自动测试一组仍然干净利落地适用于(更新的)代码库的补丁。为此,我打算运行 patch -p 1 a echo b > b diff -Nu a b > p rm a b patch -p 1 <
我已经从一个模块中导入了一个类,但是当我尝试在没有模块作为前缀的情况下修补类名时,我得到一个类型错误: TypeError: Need a valid target to patch. You sup
最近我从 SVN 迁移到 git,我的团队已经开始在新的 git 存储库中工作。 后来我发现了一些转换问题,并从 SVN 制作了第二个 git repo,并进行了一些修复和历史重写。 现在我有了 SV
我正在尝试为我的应用程序创建一个补丁。实现描述的示例 here按预期工作。但是,每个版本的文件都存储在单独的目录中。 1.0 版文件在 c:sample\1.0 中,1.1 版文件在 c:sample
首先请原谅我的长文,但我会尽量详细。 我正在为一个开源项目 (DSpace) 进行开发。我没有对他们的 SVN 存储库的提交权限,所以我查看了源代码并一直使用 git 来管理我的版本控制。 在我的开发
有没有办法自动 merge (interdiff)2 个头分支和 1 个基分支之间的冲突? 我试图在补丁级别做这件事 版本A是我的基础 VersionB 是 VersionA 的分支 VersionB
我正在尝试申请 this修补到 MinGW 上的 GCC 以获取它 to compile GDC 2 ,但我不知道如何。 (我对 GCC 的内部结构还很陌生,甚至对一般的 *nix 工具也很陌生。)我
我对软件开发很陌生,所以这无疑是一个非常基本的问题。我得到了一个开源项目的 mercurial repo。我复制了它并做了一些工作。 promise 。工作更多,然后进行了第二次提交。所以我的树看起来
我想对这个错误 ( http://code.djangoproject.com/ticket/13095 ) 应用补丁,但我以前从未做过,也不知道从哪里开始。谁能给我指点教程? 最佳答案 在 Linu
我前段时间使用 p4 diff 生成了一个补丁。命令。 然而,现在我想应用它,我意识到没有办法在 Perforce 中应用补丁。 由于我没有使用 -du选项,补丁是那种晦涩难懂的 perforce 格
我可以使用 NSIS 的 Vpatch 生成从一个版本到另一个版本的补丁文件。假设我有 mydll.dll 版本 1,我有一个补丁可以将它更新到版本 2。然后我又有了一个新版本,因此我生成了另一个补丁
我有一个补丁,用 hg export 42 制作在另一个存储库中,修改文件 asd/fgh/foo/bar.c asd/fgh/foo/fish.h boo/hoo.txt 我需要将此补丁导入具有如下
我们有一个相当大的库,我们需要定期将其导入(然后修补)到我们的代码库中。 SVN Book 似乎推荐了一个“vendor branch”方案,我们保留了“vendor drops”的补丁版本。这会起作
我正在家里用 tensorflow 玩卷积神经网络(顺便说一句,我已经完成了 udacity 深度学习类(class),所以我有理论基础)。 运行卷积时,patch 的大小会产生什么影响?当图像变大/
我是一名优秀的程序员,十分优秀!