关掉内存完整性(HVCI)会变快吗 ── 含义、步骤与判断
· 更新日期: · Go Komura · Windows 11, 内存完整性, HVCI, 内核隔离, VBS, 性能, 安全
即使听说「关掉内存完整性电脑会变快」,可一看到 Windows 安全中心弹出警告,又会犹豫该不该改。本文把 「有没有可能变快」和「自己的电脑能不能关」分开来考虑。
对象是 Windows 安全中心「设备安全性」>「内核隔离」里的「内存完整性」开关。内存完整性是保护 Windows 核心免受经由驱动程序的攻击的功能,并不是单纯用来降低性能的设置。另一方面,Microsoft 自己也说明过,在游戏设备的部分场景和部分配置中它可能影响性能。1
本文先给出结论和按目的的读法,之后再说明原理、性能的比较方法、判断标准、更改前后的确认,以及关闭的步骤与恢复方法。想更深入追究原理的读者,请参阅连载文章「Windows 虚拟化的深层(第2回) ── 连内核也看不见的内存:VBS、HVCI 与 Credential Guard 的机制」。本文相当于它的入口。
本文的前提
| 项目 | 内容 |
|---|---|
| 目标读者 | 听说「关掉内存完整性会变快」,想知道是不是真的、自己该怎么做的电脑用户、玩家,以及小规模内部电脑的管理者 |
| 前提知识 | 能操作 Windows 的设置界面。不需要严格理解驱动程序或内核这些词 |
| 前提环境 | Windows 11。操作步骤以 Windows 11 的 Windows 安全中心应用为前提。更改设置需要管理员权限 |
| 难度 | 初级 |
| 不涉及的内容 | VTL、安全内核、SLAT 的内部结构(去看第 2 回的文章)、Credential Guard、面向企业的 App Control 策略设计 |
1. 先说结论
确实有关掉之后会变快的配置。但并不是所有电脑都会变快,也不是只凭性能差就该关。
内存完整性(HVCI) 在虚拟机监控程序构建的隔离环境中,对加载进内核(操作系统核心)的驱动程序做签名验证。只让通过验证的内存页可执行,并且不允许对可执行页写入,从而让通过驱动程序劫持电脑变得更难。23
判断的轴是「这台电脑用来做什么」。如果测了有差、这个差对你的用法有影响、你不玩那些在错误里点名 HVCI 的反作弊游戏,并且这台电脑不处理公司资产或重要信息,那么关掉才进入选项。除此之外,保持开启并去找别的原因更符合实务。
结论与前往对应章节的指引
| 想知道的事 | 先要把握的答案 | 详细阅读 |
|---|---|---|
| 关掉会变快吗 | 在老 CPU 等情况下可能出现差异,但取决于配置。Microsoft 承认的性能影响也只限于部分场景和配置1 | 第 4 章: 条件与测法 |
| 什么情况下不会变 | 瓶颈在 GPU、原因是内存不足・磁盘・发热・电源模式、内存完整性本来就没在运行,这些情况 | 4.2: 按情况看预期 |
| 我可以关吗 | 用于业务或处理重要信息的电脑要保持开启。即使是专用机测出了差异,也要看失去的保护和对游戏的影响再判断 | 第 5 章: 按用途判断 |
| 怎么试 | 确认当前的运行状态并测量,改设置后重启。确认状态变化之后,再以相同条件测一次。不能只看开关的显示4 | 第 6 章: 确认方法、第 7 章: 操作步骤 |
| 开不回去时 | 找出不兼容的驱动程序并更新到对应版本。不强行开启 | 第 8 章: 恢复时的处理 |
即使只想先看操作,也请先把握第 5 章的判断标准和第 6 章的确认方法,再进入第 7 章。 关闭的操作虽短,但重启和确认是一整套。如果是灰色无法操作,请不要自行绕过管理员的设置或 UEFI 锁。
图中实线表示始终成立的关系,虚线表示带条件的关系(成立条件写在详情页各关系的说明中)。关系的完整列表(共 28 条,附依据与确信度)以及主要概念的定义,汇总在知识地图详情页(日文)。数据:JSON-LD / Turtle
2. 先分清容易混淆的 4 个词
一开始先把设置界面的名字和背后运行的机制的名字分开。这次要关的对象是「内存完整性」,不是下面这些全部。
| 名称 | 在本文中的位置 |
|---|---|
| 内存完整性(HVCI) | 要考虑是否关掉的功能 |
| 内核隔离 | 有内存完整性开关的那个画面 |
| 基于虚拟化的安全性(VBS) | 支撑内存完整性运行的基础 |
| 虚拟机平台(VMP) | 使用同一个虚拟机监控程序、与内存完整性不同的另一个功能 |
2.1 内存完整性(HVCI)
这是 Windows 安全中心「内核隔离」画面上开关的名字。正式名称是「虚拟机监控程序保护的代码完整性(Hypervisor-protected Code Integrity, HVCI)」,在 Microsoft 的文档中「内存完整性」与「HVCI」被当作同一个东西。2 本文说的「关掉」,指的就是它。
2.2 内核隔离
这是 Windows 安全中心画面的名字。它把「通过在内存中隔离 Windows 的核心进程来防御恶意软件」的一组安全功能汇总在一个画面里,内存完整性只是其中的 1 个开关。3
画面上有时还会并列内核模式的硬件强制堆栈保护等项目。虽然常见「关掉内核隔离」这种说法,但整个画面并没有一个开关,实际关掉的是内存完整性那个开关。
2.3 基于虚拟化的安全性(VBS)
这是支撑内存完整性的机制。它用 Windows 的虚拟机监控程序构建一个即使操作系统内核被劫持也依然受保护的隔离环境,并把安全功能收容其中。5
内存完整性是搭载在 VBS 之上的功能之一,Credential Guard(域凭据的保护)等也在这上面。关掉内存完整性,未必意味着 VBS 本身也停下来(第 6 章)。
2.4 虚拟机平台(VMP)与 Hyper-V
这是「启用或关闭 Windows 功能」中的一项,是运行 WSL 2 这类轻量虚拟机的基础。6 在 Microsoft 关于游戏性能的说明中,它与内存完整性并列,也被列为性能影响的因素。1 它是与内存完整性不同的另一个开关、另一个功能。
另外,Windows 沙盒不是靠 VMP 而是靠「Windows 沙盒」这个专用的可选功能启用的,它不依赖 VMP,但同样运行在同一个 Windows 虚拟机监控程序之上。7
flowchart TB
accTitle: 四个词之间的关系
accDescr: Windows 虚拟机监控程序之上承载基于虚拟化的安全性(VBS)与虚拟机平台,VBS 之上承载内存完整性与 Credential Guard,Windows 安全中心的内核隔离画面显示内存完整性的开关,展示这样的包含关系
hv["Windows 虚拟机监控程序"]
vbs["基于虚拟化的安全性(VBS)"]
vmp["虚拟机平台"]
hvci["内存完整性(HVCI)"]
cg["Credential Guard 等"]
ui["内核隔离画面(显示开关)"]
hv --> vbs
hv --> vmp
vbs --> hvci
vbs --> cg
ui -.->|"映出设置"| hvci
图 1: 「内核隔离」是画面的名字,「内存完整性」是其中的开关,VBS 是它的基础,VMP 是承载在同一个虚拟机监控程序上的另一个功能。
也就是说,被称为「关掉会变快」的东西,其真身是承载在虚拟机监控程序之上的 2 个功能(内存完整性与 VMP),而设置界面的开关只切掉其中前者。
3. 内存完整性到底在做什么
本章按保护什么 → 为什么影响性能 → 我的电脑上一开始就启用了吗的顺序梳理。想先知道性能差异预期的读者,可以从第 4 章的表开始读。
3.1 把驱动程序的检查站挪到内核之外
Windows 本来就有检查加载进内核的驱动程序是否正确签名的机制(代码完整性)。问题在于,做这项检查的代码也在内核里。劫持了内核的攻击者可以把检查本身掉包。
内存完整性把这项检查放到 VBS 的隔离环境中执行。2 隔离环境由虚拟机监控程序守护,所以即使劫持了内核也伸不到检查那里。此外,它还对内核的内存施加下面 2 条规则。2
- 内核的内存页只有在通过验证之后才变得可执行。
- 可执行的页不会变成可写。
flowchart TB
accTitle: 内存完整性启用时的驱动程序加载
accDescr: 驱动程序的加载请求在 VBS 的隔离环境中接受签名验证,通过则以可执行且不可写的页被允许,不通过则加载被阻止并记录到 CodeIntegrity 操作日志
req["驱动程序的加载请求"] --> chk{"在隔离环境中验证签名"}
chk -->|"通过"| ok["以可执行・不可写允许"]
chk -->|"不通过"| ng["阻止加载"]
ng --> log["记录到 CodeIntegrity 日志(3087)"]
图 2: 检查站在内核之外,所以即使劫持了内核也换不掉检查站。
有了这条规则,即使利用漏洞改写了内核的内存,也无法把改写的内容付诸执行。因为能写的页不能执行,能执行的页不能写。2 Windows 安全中心说明文里的「让恶意程序更难利用低级驱动程序劫持电脑」3,说的就是这件事。
3.2 为什么会影响性能
保护用的处理是有开销的。这里把使用虚拟机监控程序带来的开销和内存完整性管理执行权限带来的开销分开来看。
开销 1: 虚拟机监控程序运行在 Windows 之下
VBS 以虚拟机监控程序为前提,而虚拟机监控程序必须要有 SLAT(二级地址转换)这个 CPU 功能。5 主机的 Windows 自身作为虚拟机监控程序之上的分区运行,因此内存地址的转换变成两级,多出那部分开销。这个结构在「你的 Windows 实际在哪里运行」中有详细讲解。
开销 2: 管理内核的内存能否执行
内存完整性把「只有通过验证的页才可执行」这条规则,交给虚拟机监控程序的内存保护来强制,而不是交给内核自己。在这个处理上,CPU 的世代差就起作用了。
Microsoft 的文档说明,内存完整性在具备 Intel Kaby Lake(第 7 代)及以后的 Mode-Based Execution Control(MBEC) 或 AMD Zen 2 及以后的 Guest Mode Execute Trap(GMET) 的处理器上运行得更好。比它们更老的处理器要依赖 称为 Restricted User Mode 的模拟,因此对性能的影响更大。8
MBEC 是把内存的执行权限分成「可否在用户模式下执行」和「可否在内核模式下执行」,让硬件能区分的功能。9 内存完整性只想约束内核模式的执行,所以只要有这个区分就可以交给 CPU。没有的话,就由虚拟机监控程序用软件来代劳。
flowchart TB
accTitle: 产生性能开销的两个位置
accDescr: 内存完整性的性能开销产生在两处:虚拟机监控程序垫在下面带来的两级地址转换,以及在虚拟机监控程序一侧强制内核页的执行权限;后者的大小取决于有没有 MBEC/GMET
hvci["内存完整性已启用"] --> c1["虚拟机监控程序垫在操作系统之下"]
hvci --> c2["由虚拟机监控程序强制执行权限"]
c1 --> t1["地址转换变成两级"]
c2 --> q{"CPU 有 MBEC / GMET 吗?"}
q -->|"有"| small["由硬件处理(影响较小)"]
q -->|"没有"| big["模拟(影响较大)"]
图 3: 「关掉会变快」的幅度,主要由右侧的分支决定。
自己的 CPU 有没有 MBEC/GMET,可以看第 6 章介绍的 Win32_DeviceGuard 的 AvailableSecurityProperties 中是否包含 7。8
3.3 我的电脑上到底有没有在运行
在进入性能比较之前,还需要确认一件事。并不是只要是 Windows 11,内存完整性就一定在运行。
内存完整性是在把 Windows 11 全新安装到受支持硬件上时默认启用的功能,从 Windows 10 升级则不会自动启用。4 自动启用的条件如下。4
| 项目 | 自动启用的条件 |
|---|---|
| 处理器 | Intel 第 8 代及以后(Windows 11 22H2 及以后。21H2 是第 11 代及以后)、AMD Zen 2 及以后、Qualcomm Snapdragon 8180 及以后 |
| 内存 | 8GB 以上(x64 的情况) |
| 存储 | 64GB 以上的 SSD |
| 驱动程序 | 只装有支持内存完整性的驱动程序 |
| 固件 | UEFI/BIOS 中启用了虚拟化辅助功能 |
也就是说,从 Windows 10 升级后就这么用着的电脑、不满足条件的电脑、哪怕只有一个不兼容驱动程序的电脑,都可能本来就是关着的。在那种状态下感觉「关掉之后变快了」,那是别的因素造成的。请先用第 6 章的方法确认当前的状态。
flowchart TB
accTitle: 内存完整性默认启用的条件
accDescr: 在 Windows 11 的全新安装中,同时满足 CPU 世代・8GB 以上内存・64GB 以上 SSD・受支持的驱动程序・固件已启用虚拟化这些条件才会默认启用;升级安装或条件不足则不会启用
start["安装 Windows 11"] --> how{"是全新安装吗?"}
how -->|"升级"| off1["不会自动启用"]
how -->|"是"| cond{"CPU・内存・SSD・驱动程序的条件"}
cond -->|"满足"| on["默认启用"]
cond -->|"不满足"| off2["不会启用(可手动开)"]
图 4: 「我的电脑本来就是关着的」并不少见。试之前先看当前状态。
4. 真的会变快吗 ── 判断的材料
本章的要点是,有可能影响性能,但无法一概而论会快多少百分比。官方的说明、按配置的预期、在自己电脑上的实测,要分开来读。
4.1 Microsoft 说了什么
Microsoft 的支持文章「Options to optimize gaming performance in Windows 11」讲到,Windows 11 为了内存完整性(HVCI)与虚拟机平台(VMP)而使用虚拟化,并且在游戏设备的部分场景和部分配置中,内存完整性与 VMP 处于开启状态可能带来性能影响,同时给出了分别关闭它们的步骤。1
也就是说「有可能变快」是 Microsoft 官方的看法。但它带着「在部分场景和部分配置中」这个限定,并没有给出会快多少的数字。
4.2 容易出现差异的条件与不容易出现的条件
把 3.2 的原理能推出的结论按情况整理如下。这里写的「预期」是从原理出发的倾向,不是 Microsoft 公布的实测值。 自己的电脑如何,请用 4.3 的方法实测。
| 情况 | 关掉后变快的预期 | 理由 |
|---|---|---|
| 没有 MBEC/GMET 的老 CPU(Intel 第 7 代之前、AMD Zen 2 之前) | 容易出现差异 | 执行权限的强制由模拟来代劳8 |
| 瓶颈在 CPU、追求高 fps 的游戏 | 有时会出现差异 | Microsoft 承认有性能影响的领域1 |
| 瓶颈在 GPU 的游戏(高分辨率・高画质设置) | 很小 | 就算减轻 CPU 一侧的负担,GPU 的等待时间也不会变 |
| 浏览器、Office、看视频 | 基本感觉不到 | 这些不是频繁变更内核执行权限的处理 |
| 使用 Hyper-V・WSL 2・Windows 沙盒・Docker 的电脑 | 关掉后基础仍在 | 虚拟机监控程序本身会为了这些继续运行(6.2) |
| 变慢的原因是内存不足・磁盘・发热・电源模式 | 不会变 | 与内存完整性无关的另一个原因 |
| 本来内存完整性就没在运行的电脑 | 不会变 | 没有可关的东西(3.3) |
flowchart TB
accTitle: 关掉会不会变快的判断流程
accDescr: 先确认内存完整性当前是否在运行,没在运行就去找别的原因;在运行则按 CPU 有没有 MBEC/GMET 以及瓶颈是不是 CPU 来区分预期,最后以相同条件实测再判断
s["体感很慢"] --> run{"内存完整性在运行吗?"}
run -->|"否"| other["去找别的原因"]
run -->|"是"| cpu{"CPU 有 MBEC / GMET 吗?"}
cpu -->|"没有"| likely["容易出现差异"]
cpu -->|"有"| bn{"瓶颈是 CPU 吗?"}
bn -->|"是"| maybe["有时会出现差异"]
bn -->|"否(GPU 等)"| small["预计差异很小"]
likely --> measure["以相同条件实测再判断"]
maybe --> measure
small --> measure
图 5: 「会不会变快」由电脑的配置决定。最后起作用的不是原理知识,而是在自己电脑上的实测。
4.3 不要凭体感,要实测
只凭「关掉之后感觉变快了」,无法判断设置的效果。因为为了改设置已经重启过,光是重启就会让电脑暂时轻快一些。
在真正改设置之前,请先按第 5 章确认这台电脑是不是可以关的。 在此基础上做比较时,请把握下面需要注意的地方。测量的顺序如图 6 所示,是「确认开启并测量 → 关掉并重启 → 确认关闭并以相同条件测量」。确认方法在第 6 章,更改设置的方法在第 7 章。
测量时要把握的状态与条件
- 确认状态真的变了。 关掉并重启之后,用第 6 章的方法确认「正在运行的服务」里已经没有内存完整性。不做这一步就测,可能是在拿开启和开启做比较。
- 统一条件。 是接电源还是用电池、电源模式、后台在跑的东西,游戏则是同一场景・同一画质设置。比较条件的统一方法整理在「在 Windows 上正确比较不同版本程序运行速度的方法」中。
多测几次,看差异是否对用法有影响
使用游戏内置的基准测试,或某个固定处理所花的时间等能出数字的东西。开启和关闭各测 3 次左右,比较中位数。
要看的不只是数字有没有变大。平均 fps 提高 2%,在画面上是分辨不出来的。最低 fps(卡顿)有没有改善,对体感的影响更大。要确认这个差异是不是「对用法有影响」的量级。
flowchart TB
accTitle: 开启・关闭的比较步骤
accDescr: 确认当前状态并固定条件,做多次相同的测量,改设置后重启,确认状态已变再重复相同的测量,最后按差异的大小是否对用法有影响来判断
a["确认当前状态(第 6 章)"] --> b["固定条件测 3 次"]
b --> c["改设置后重启"]
c --> d["确认状态已改变"]
d --> e["以相同条件测 3 次"]
e --> f{"差异大到对用法有影响吗?"}
f -->|"是"| g["进入第 5 章的判断"]
f -->|"否"| h["开回去并找别的原因"]
图 6: 不要把重启之后的轻快与设置的效果混为一谈。状态的确认是测量的前提。
如果没有差异,就去找别的原因
没有差异,说明变慢的原因在别处。整台电脑都很重时的排查方法请看「WPR/WPA 实务 ── 从系统整体调查「整台 PC 变慢」」,怀疑是任务管理器的效率模式所致时请看「Windows 的效率模式是什么 - Windows 11 绿色叶子图标代表什么,以及如何关闭」。
5. 到底能不能关 ── 会失去什么
「会变快」和「可以关」是两个不同的判断。 就算测出了差异,那本身也不构成关掉的理由。要把失去的保护与这台电脑的用途对照着看。
5.1 会失去的东西
要注意的是三点:保护变弱、会出警告、有些软件用不了。
针对内核代码注入的防线被撤掉
通过有漏洞的驱动程序或未签名的驱动程序劫持内核的攻击,内存完整性会让它变得更难。2 关掉之后,面对这类攻击就回到以往的 Windows 了。
Windows 安全中心会出警告
从 Windows 11 22H2 开始,内存完整性关闭时 Windows 安全中心会显示警告,任务栏的图标和通知中心也会带上警告标记。警告可以在 Windows 安全中心的界面上关掉。8
要求 HVCI 的游戏可能无法启动
一部分反作弊(如 Riot Games 的 Vanguard)在 Windows 11 上把 HVCI(内存完整性)用于系统完整性的验证。
Riot 的支持文章说明,要分别启用 VAN: RESTRICTION 错误中列出的安全功能(TPM 2.0、安全启动、内存完整性、IOMMU 中的某一个)。在错误中点名了 HVCI 的电脑上,不开启它游戏就无法启动。10
这并不是对所有电脑一律施加的条件,但可能出现「为了想提速的游戏关掉,结果另一个游戏启动不了」的情况。
flowchart TB
accTitle: 关掉内存完整性会失去什么
accDescr: 关掉内存完整性后,针对内核代码注入的防线被撤掉,Windows 11 22H2 及以后 Windows 安全中心会持续出警告,而在错误中点名 HVCI 的反作弊游戏将无法启动
off["关掉内存完整性"] --> l1["针对内核代码注入的防线被撤掉"]
off --> l2["Windows 安全中心出警告"]
off --> l3["点名 HVCI 的游戏跑不起来"]
图 7: 会失去的有 3 样。与速度的差异是否相称,要看过这 3 样再决定。
5.2 判断的参考
| 这台电脑是 | 参考 |
|---|---|
| 公司的电脑、接入内部网络的电脑、处理业务数据的电脑 | 保持开启。如果慢到想关掉,就另找原因(4.3) |
| 家用电脑,也用来上网・收发邮件・网上银行 | 保持开启。得到的差异不值得 |
| 接近游戏专用的电脑,测出了差异,而且不玩点名 HVCI 的反作弊游戏 | 关掉是选项。但要记住自己关了它,用途变了就改回去 |
| 老 CPU(没有 MBEC/GMET),游戏或重负载处理的体感明显不好 | 测出差异的话关掉是选项。但正道还是更新电脑 |
| 开发机・验证机,会用 Hyper-V 或 WSL 2 | 关掉后基础仍在,很难出现期待的差异(6.2) |
flowchart TB
accTitle: 能不能关的判断
accDescr: 涉及业务数据或内部网络的电脑保持开启;要玩在错误中点名 HVCI 的反作弊游戏也保持开启;只有测出差异的专用机才是关掉的候选,其余保持开启并去找别的原因
q1{"涉及业务数据・内部网络吗?"} -->|"是"| keep1["保持开启(去找别的原因)"]
q1 -->|"否"| q2{"要玩点名 HVCI 的游戏吗?"}
q2 -->|"是"| keep2["保持开启"]
q2 -->|"否"| q3{"测出差异了吗?"}
q3 -->|"是"| off["关掉是选项(用途变了就改回去)"]
q3 -->|"否"| keep3["保持开启"]
图 8: 能成为关掉候选的,只有走到最后一个分支的电脑。
6. 确认它是否已经关掉
从这里开始是操作的准备。先把握确认方法,在更改前后使用同一种方法。 关键是不要只看了开关就断定「原来是开着的」「已经关掉了」。
6.1 开关的显示是「设置」,不是「运行状态」
Windows 安全中心「内核隔离」画面的开关显示的是设置的值。刚启用完等待重启期间,或者启动时因兼容性问题内存完整性没能启动期间,开关看上去也可能是开着的。运行状态要用下面两种方法之一确认。4
用界面确认: msinfo32(系统信息)
- 从
Win + R执行msinfo32。 - 看「系统摘要」下方的「基于虚拟化的安全性」一栏。
- 如果「正在运行的服务」里包含「虚拟机监控程序强制的代码完整性」,说明内存完整性正在运行。8
用数值确认: PowerShell
在以管理员身份打开的 PowerShell 中执行下面这些。8
Get-CimInstance -Namespace root/Microsoft/Windows/DeviceGuard `
-ClassName Win32_DeviceGuard |
Select-Object VirtualizationBasedSecurityStatus,
SecurityServicesConfigured,
SecurityServicesRunning,
AvailableSecurityProperties
读法如下。8
| 属性 | 值 | 含义 |
|---|---|---|
VirtualizationBasedSecurityStatus |
0 / 1 / 2 | VBS 已禁用 / 已启用但未运行 / 已启用且正在运行 |
SecurityServicesConfigured |
包含 2 | 内存完整性在设置上已启用 |
SecurityServicesRunning |
包含 2 | 内存完整性实际上正在运行 |
AvailableSecurityProperties |
包含 7 | CPU 具备 MBEC/GMET(3.2) |
关掉并重启之后,只要 SecurityServicesRunning 里没有 2 就算成功。 如果 SecurityServicesConfigured 里也没有 2,说明在设置上也已经关掉。VBS 整体的状态和内存完整性的运行状态要分开读。
flowchart TB
accTitle: 内存完整性运行确认的流程
accDescr: 查询 Win32_DeviceGuard,SecurityServicesRunning 包含 2 则内存完整性正在运行,不包含则没有在运行。若设置一侧的 SecurityServicesConfigured 有 2 却没有运行,就怀疑是等待重启或启动时的兼容性问题
q0["查询 Win32_DeviceGuard"] --> r{"SecurityServicesRunning 里有 2 吗?"}
r -->|"有"| on["内存完整性正在运行"]
r -->|"没有"| c{"Configured 里有 2 吗?"}
c -->|"有"| wait["等待重启或启动时的兼容性问题"]
c -->|"没有"| off["设置与运行都已关闭"]
图 9: 要看的是 Running 而不是 Configured。设置与运行要分开读。
6.2 关掉后虚拟机监控程序仍会留下的配置
只停掉内存完整性,基础未必会停
内存完整性是承载在 VBS 之上的功能之一。关掉的只是内存完整性,VBS 的启用与否由另一个设置(EnableVirtualizationBasedSecurity)管理。Microsoft 的文档也明确写有「只启用 VBS(不含内存完整性)」这种配置。8
再者,只要在用 Hyper-V、WSL 2、Windows 沙盒、虚拟机平台,虚拟机监控程序就会为了它们继续启动。6
3.2 中看到的两项开销里,「虚拟机监控程序垫在操作系统之下」那一项在这种情况下即使关掉也仍然留着。如果关掉内存完整性后 msinfo32 的「基于虚拟化的安全性」仍是「正在运行」,说明基础还在。
flowchart TB
accTitle: 关掉内存完整性后仍然留下的东西
accDescr: 即使关掉内存完整性的开关,只要 VBS 的启用设置、Hyper-V、WSL 2、Windows 沙盒、虚拟机平台中有任何一个是启用的,虚拟机监控程序就会继续运行,两级地址转换的开销依然留着
off["关掉内存完整性"] --> q{"还有别的东西用虚拟机监控程序吗?"}
q -->|"VBS 设置・Credential Guard"| stay1["虚拟机监控程序仍在"]
q -->|"Hyper-V・WSL 2・沙盒・VMP"| stay2["虚拟机监控程序仍在"]
q -->|"什么都没有"| gone["有可能连基础一起停下"]
stay1 --> cost["两级地址转换的开销仍在"]
stay2 --> cost
图 10: 开关切掉的只有内存完整性。只要还有需要虚拟机监控程序的其他功能,基础就原样留着。
连基础一起停掉的做法不在本文范围内
也存在禁用 VBS 本身、或者不启动虚拟机监控程序的配置,但那样一来包括 Credential Guard 在内的 VBS 上的所有功能,以及 Hyper-V、WSL 2、Windows 沙盒都会用不了。这是与「关掉内存完整性」完全不同、影响大得多的改动。本文不涉及那些步骤。想在理解原理之后再判断的读者,请先读完连载第 1 回和第 2 回。
7. 关闭的步骤
通常从 7.1 的 Windows 安全中心界面操作。 7.2 是无法操作时的排查,7.3 是界面用不了的环境下的替代手段。7.4 的 VMP 是另一个功能,并不是为了关掉内存完整性而要接着做的步骤。
7.1 从 Windows 安全中心(标准步骤)
关闭: 一直做到更改设置・重启・确认
- 从
开始打开「Windows 安全中心」。 - 在左侧菜单选择「设备安全性」。
- 打开「内核隔离」下方的「内核隔离详细信息」。
- 把「内存完整性」的开关设为关。出现管理员权限确认(UAC)时予以允许。
- 重启电脑。 不重启更改就不会生效。1
- 重启后,用 6.1 的方法确认已经关闭。
开回去: 在同一画面操作
要恢复时,在同一画面把开关设为开并重启。开启时可能会进行不兼容驱动程序的检查。如果出现列表,不要强行开启,请按第 8 章的顺序处理。
要做比较时,先确认更改前后的运行状态,再用 4.3 的方法测量。如果差异对用法没有影响,就开回去并另找原因。
flowchart TB
accTitle: 从 Windows 安全中心关掉内存完整性的步骤
accDescr: 从 Windows 安全中心的设备安全性打开内核隔离详细信息,把内存完整性的开关关掉并重启,再用 msinfo32 或 Win32_DeviceGuard 确认已经关闭
s1["打开 Windows 安全中心"] --> s2["设备安全性"]
s2 --> s3["内核隔离详细信息"]
s3 --> s4["关掉内存完整性"]
s4 --> s5["重启"]
s5 --> s6["用第 6 章的方法确认"]
图 11: 步骤本身很短。容易漏掉的是最后两步(重启与确认)。
7.2 开关是灰色、点不动时
如果是公司或学校的电脑,请不要自行绕过,去找管理员沟通。 灰色无法操作时,可能有下面这些原因。
被策略或注册表固定了
如果开关是灰色并显示「此设置由管理员管理」,说明这台电脑的设置被组策略或 Intune 等固定了,或者界面被注册表禁用了。8 如果是公司或学校的电脑,这就是管理员的意图。
是带 UEFI 锁启用的
用组策略的「打开基于虚拟化的安全性」选择「使用 UEFI 锁启用」而部署的电脑,设置保存在 UEFI(固件)的变量中,因此无法通过远程或策略更新来关掉内存完整性。8
要解除,需要先撤掉策略或注册表的设置,再由坐在这台电脑前的人执行清除保存在 UEFI 中的配置的步骤。在使用同样 UEFI 锁的 Credential Guard 的文档中,给出了以管理员权限用 bcdedit 删除 EFI 变量,并在重启时在物理机前批准出现的确认提示的步骤。11
光是在 UEFI 菜单里禁用安全启动,并不会清除保存的配置。 还可能招致输入 BitLocker 恢复密钥。这是「防止被随意关掉」的设置,因此仍属于管理员的职责范围。
flowchart TB
accTitle: 开关是灰色时的排查
accDescr: 开关是灰色时,要么是由管理员管理(策略或注册表),要么是 UEFI 锁(需要在电脑前清除保存在 UEFI 中的配置),两者都不要自行绕过,去找管理员沟通
gray["开关是灰色"] --> why{"显示的理由是什么?"}
why -->|"由管理员管理"| pol["被策略・注册表固定"]
why -->|"UEFI 锁"| lock["需要在电脑前清除 UEFI 的配置"]
pol --> ask["去找管理员沟通"]
lock --> ask
图 12: 灰色不是故障,而是有人有意固定的标志。
7.3 用注册表设置(界面用不了时)
这个方法是 Windows 安全中心界面用不了的环境,或者想用脚本设置时的替代手段。它不是绕过管理员设置的方法。而且要开回去时,请使用 7.1 的界面。
用于关闭的值与命令
Microsoft 文档中记载的内存完整性启用・禁用的设置值如下。8
| 项目 | 值 |
|---|---|
| 路径 | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity |
| 值的名称 | Enabled |
| 类型 | REG_DWORD |
| 数据 | 0 为关,1 为开 |
在以管理员身份打开的终端中执行下面这条并重启。
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v Enabled /t REG_DWORD /d 0 /f
这与 Microsoft 给出的、在启用内存完整性之后无法启动的电脑上从恢复环境(Windows RE)修复的步骤是同一个操作。8
恢复时不要往注册表写 1 的理由
要恢复时,不要往注册表写回 1,而是从 7.1 的 Windows 安全中心界面开启。 从界面开启时会先跑一遍不兼容驱动程序的检查,有命中就会显示列表(第 8 章)。3
用注册表写 1,就会跳过那道检查,下次启动时直接要求内存完整性。如果不兼容的驱动程序还留着,就会直接招致第 8 章警告的启动失败。可以用策略或注册表启用的场合,仅限于已经通过不兼容驱动程序列表和 CodeIntegrity 日志确认没有问题之后。
改了却不生效、或者被改回去的情况
在同一个键的 Locked 为 1(UEFI 锁)的电脑上,改这个值也不会生效。8 另外,在由组织策略管理的电脑上,下次应用策略时设置会被改回去。注册表是「界面的替代」,而不是「覆盖管理员设置的手段」。
flowchart TB
accTitle: 用注册表设置时不生效的条件
accDescr: 即使把 HypervisorEnforcedCodeIntegrity 的 Enabled 设为 0,只要同一个键的 Locked 是 1(UEFI 锁)就不会生效;在受组织策略管理的电脑上,下次应用策略时设置会被改回去。要开回去时不用注册表,而是从 Windows 安全中心的界面操作
reg["把 Enabled 设为 0 并重启"] --> lk{"Locked 是 1(UEFI 锁)吗?"}
lk -->|"是"| no1["不生效(需要在 UEFI 一侧解除)"]
lk -->|"否"| pol{"是被策略管理的吗?"}
pol -->|"是"| no2["下次应用时会被改回去"]
pol -->|"否"| ok["会关掉(用第 6 章确认)"]
ok -.-> back["恢复时从界面来(会有检查)"]
图 13: 注册表值只是写了与界面相同的设置,压不过锁和策略。
7.4 虚拟机平台(VMP) 是另一套步骤
Microsoft 关于游戏性能的说明中也提到了 VMP,但它是与内存完整性不同的另一个功能。并不是为了关掉内存完整性就必须把 VMP 也去掉。
去掉之前,先确认在用什么功能
VMP 是 WSL 2 的前提功能。6 在使用 WSL 2、或以 WSL 2 为基础的 Docker Desktop 的电脑上去掉它,那些东西就跑不起来了。
Windows 沙盒不是靠 VMP 而是靠专用的可选功能启用的,所以去掉 VMP 也还能用。7 不过沙盒同样运行在同一个虚拟机监控程序之上,只要继续用它,就会成为 6.2 中看到的「基础仍在」那一侧的因素。
判断标准是「不用就去掉」,而不是「因为会变快就去掉」。
不使用 VMP 时的操作
VMP 不在 Windows 安全中心,而是在「Windows 功能」里关闭。1
- 在
开始搜索「Windows 功能」,打开「启用或关闭 Windows 功能」。 - 取消「虚拟机平台」的勾选并按「确定」。
- 重启。
flowchart TB
accTitle: 是否可以去掉虚拟机平台
accDescr: 如果在用 WSL 2 或 Docker Desktop(WSL 2 后端)等依赖虚拟机平台的功能就不要去掉,只有不使用时才是去掉的候选。Windows 沙盒是专用功能,去掉 VMP 也能用,但它使用同一个虚拟机监控程序,所以基础仍在
vmp["想去掉 VMP"] --> use{"用 WSL 2 或 Docker Desktop 吗?"}
use -->|"用"| keep["不要去掉(会跑不起来)"]
use -->|"不用"| ok["去掉的候选(从 Windows 功能)"]
ok --> reboot["重启并确认"]
ok -.-> sb["沙盒是另一个功能(基础仍在)"]
图 14: 要不要去掉 VMP,取决于「用不用这个功能」而不是快不快。
8. 开回去时 ── 对「不兼容的驱动程序」的处理
本章把自己开不回去的情况和在自动启用的电脑上不知不觉变成关闭的情况分开来讲。两者都要先在驱动程序列表或日志中确认,再做处理。
8.1 开不回去时,先确认驱动程序
在关闭过内存完整性的电脑上想把它开回去时,有时会被告知有「不兼容的驱动程序」而开不了。Windows 安全中心在把开关打开时会检查驱动程序,若有不符合内存完整性规则(3.1)的驱动程序,就会显示列表。3
处理的顺序如下。
- 在列表中确认对象。 从「内核隔离」画面的「检查不兼容的驱动程序」查看驱动程序的文件名与提供方。
- 换成更新后的驱动程序。 按 Microsoft 的指引,确认设备制造商是否提供了更新后的驱动程序。3 有时会出现在 Windows 更新的「可选更新」里。
- 是不用的设备的驱动程序就删掉。 以前接过的外设、没卸载干净的实用程序的驱动程序留在系统里,是很常见的。
- 在日志中确认哪个驱动程序被阻止。 事件查看器的
Applications and Services Logs\Microsoft\Windows\CodeIntegrity\Operational中,以事件 ID 3087 为代表记录着内存完整性造成的阻止。4
请不要在不兼容的驱动程序还留着的情况下强行开启。 Microsoft 警告过,与内存完整性不兼容的驱动程序会导致设备或软件误动作,在极少数情况下会导致启动失败(蓝屏)。8 如果真的无法启动了,还准备了从恢复环境把 7.3 的注册表值设为 0 来恢复启动的步骤。8
flowchart TB
accTitle: 开不回去时的处理
accDescr: 在不兼容驱动程序的列表中锁定对象,制造商有更新版就换掉,是不用的设备就删掉,两者都做不到时不要强行开启,保持关闭并向制造商要求提供对应版本
fail["开不了"] --> list["查看不兼容驱动程序列表"]
list --> upd{"制造商有更新版吗?"}
upd -->|"有"| fix["换掉并开启"]
upd -->|"没有"| used{"这个设备还在用吗?"}
used -->|"不用"| rm["删掉驱动程序并开启"]
used -->|"在用"| wait["不强行,向制造商要求"]
图 15: 正道是更新驱动程序。强行开启的代价是可能无法启动,并不划算。
8.2 自动关回去的安全装置是有条件的
仅限于自动启用的电脑的机制
对于 Windows 自动启用了内存完整性的电脑(3.3 的默认启用,或厂商在出厂镜像中启用的电脑),有时会内置一个安全装置:如果在启用之后紧接着发生启动时的崩溃,就自动把内存完整性关回去。
Microsoft 的文档说明,这个安全装置在注册表的 WasEnabledBy 与 EnabledBootId 被设置的情况下起作用,仅在启用后的 3 次启动期间有效,并且是厂商在出厂镜像中设置的配置。4
对于从内核隔离画面自行开启的情况,这个行为没有被文档化。 手动开回去时,不要指望这个安全装置,请先按 8.1 的步骤把不兼容的驱动程序处理干净。
自动关掉了,也不等于确定了原因
「全新安装之后不知不觉就变成关闭了」这种现象,有时正是这个安全装置起作用的结果。不过它记录的只是「在启用之后紧接着启动失败了」这个事实。并不等于确定了原因就是不兼容的驱动程序。 在那段期间因为无关的原因启动失败,也会得到同样的结果。
Microsoft 的文档也说明,如果关掉内存完整性后启动失败仍在继续,就会认定不是内存完整性造成的,并把设置改回去。4
原因是不兼容驱动程序的可能性很高,所以要先用「不兼容的驱动程序」列表和 CodeIntegrity 日志取得佐证。有命中就按 8.1 的步骤处理,没有命中就另行调查启动失败的原因。
flowchart TB
accTitle: 自动启用的电脑上自动关回去的安全装置
accDescr: 在 Windows 自动启用(设置了 WasEnabledBy 与 EnabledBootId)的电脑上,若在启用后 3 次启动之内发生启动时崩溃,内存完整性可能自动关回去。手动开启时这个行为没有被文档化,不要指望它。自动关掉也只是启动失败的记录而不是原因的确定,所以要用不兼容驱动程序列表与 CodeIntegrity 日志取得佐证,有命中就更新或删除来处理,没有就另查原因
en["内存完整性被启用"] --> how{"是自动启用(WasEnabledBy)吗?"}
how -->|"手动开启"| manual["安全装置没有被文档化"]
how -->|"自动"| boot{"3 次以内的启动中崩溃了吗?"}
boot -->|"没有"| fine["保持启用运行"]
boot -->|"有"| auto["自动关回去"]
auto --> chk{"列表或日志里有命中吗?"}
chk -->|"有"| fix["用更新或删除来处理"]
chk -->|"没有"| other["另查原因"]
图 16: 安全装置只在自动启用的电脑上起作用,手动开启时靠不上它。就算它起作用了,那也是信号而不是诊断,所以要先用列表和日志取得佐证再修。
9. 常见的误解
最后确认一下在改设置前后容易混淆的几点。
9.1「我把内核隔离关掉了」
内核隔离是画面的名字,实际关掉的是内存完整性的开关(第 2 章)。同一画面上的其他项目、以及 VBS 本身,都没有被关掉。
9.2「关掉就一定会变快」
可能变快的前提是内存完整性确实在运行、瓶颈在 CPU 一侧,尤其是 CPU 不具备 MBEC/GMET 的情况(第 4 章)。受 GPU 限制的游戏,或原因在别处的慢,都不会变。
9.3「把开关关掉就完事了」
不重启就不会生效,重启后还需要另行确认运行状态(第 6 章)。反过来,在被策略或 UEFI 锁固定的电脑上,动了开关也会被改回去。
9.4「关掉也没有别的影响」
针对内核代码注入的防线被撤掉,Windows 安全中心会持续出警告,而在错误中点名 HVCI 的反作弊游戏将无法启动(第 5 章)。
9.5「关掉之后虚拟机监控程序也会停」
内存完整性只是 VBS 之上的一个功能,只要 VBS 的设置、Credential Guard、Hyper-V、WSL 2、Windows 沙盒、VMP 中任意一个是启用的,虚拟机监控程序就会继续运行(6.2)。
flowchart TB
accTitle: 误解与实际的对应表
accDescr: 「关掉了内核隔离」这个误解对应的实际是关掉的只有内存完整性的开关;「一定会变快」对应的是取决于配置;「关掉开关就完事」对应的是还需要重启与确认;「虚拟机监控程序也会停」对应的是有其他功能时它仍会留下
m1["关掉了内核隔离"] --> r1["关掉的是内存完整性的开关"]
m2["一定会变快"] --> r2["取决于配置。实测再判断"]
m3["关掉开关就完事"] --> r3["需要重启与运行确认"]
m4["虚拟机监控程序也会停"] --> r4["有其他功能就会留下"]
图 17: 误解大多产生于把「画面的名字」和「机制的名字」混在一起。
10. 总结
内存完整性(HVCI) 是把进入内核的驱动程序的检查站,搬到内核之外的隔离环境的机制。这次搬迁的代价是要把虚拟机监控程序垫在下面、要由虚拟机监控程序强制执行权限,在某些配置下会影响性能。
判断可以分成下面 3 个阶段来梳理。
- 确认用途与会失去的东西。 关掉的候选是那些不涉及业务数据或内部网络、也不玩点名 HVCI 的反作弊游戏的专用机。不能只凭速度来决定。
- 确认运行状态之后,以相同条件实测。 使用 msinfo32 或
Win32_DeviceGuard,确认更改前后状态确实变了。容易出现差异的是没有 MBEC/GMET 的老 CPU 和受 CPU 限制的游戏,受 GPU 限制的游戏或日常用途则不容易出现。多测几次,看这个差异是否对用法有影响。 - 依差异与用途,决定维持还是恢复。 关掉是测出差异之后的选项。在使用 Hyper-V・WSL 2・沙盒・VMP 的电脑上基础仍在,很难出现期待的差异。差异对用法没有影响就开回去,用途变化时也要重新审视。开不回去时的正道是更新驱动程序,不要强行开启。
「关掉会变快」不是假话。但只有加上「在自己的电脑上」「实测过」「知道会失去什么」这 3 个条件,它才成为判断的材料。
相关文章
- Windows 虚拟化的深层(第2回) ── 连内核也看不见的内存:VBS、HVCI 与 Credential Guard 的机制
- Windows 虚拟化的深层(第1回) ── 你的 Windows 实际在哪里运行:虚拟机监控程序与分区
- Windows 虚拟化的深层(第3回) ── 数秒启动的虚拟机:WSL2、Windows Sandbox 与容器为何这么轻
- Windows 的效率模式是什么 - Windows 11 绿色叶子图标代表什么,以及如何关闭
- 在 Windows 上正确比较不同版本程序运行速度的方法。从电源模式等环境的统一到其极限
- WPR/WPA 实务 ── 从系统整体调查「整台 PC 变慢」
- Windows 的处理器计划设置 - 后台服务与 P 核 / E 核
相关的咨询领域
小村软件有限公司承接 Windows 应用程序与安全功能(内存完整性・VBS・App Control)的兼容性调查、驱动程序引起的故障分析,以及用测量来厘清「电脑或应用很慢」原因的性能调查。欢迎从「关掉了也没变快」之后的部分开始咨询。
参考链接
-
Microsoft Support, Options to optimize gaming performance in Windows 11. 关于 Windows 11 为内存完整性(HVCI) 与虚拟机平台(VMP) 使用虚拟化;在游戏设备的部分场景和配置中它们处于开启状态可能带来性能影响;以及从内核隔离画面关闭内存完整性、从「Windows 功能」关闭 VMP 并重启的步骤。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Microsoft Learn, Memory integrity and virtualization-based security. 关于内存完整性(HVCI) 在 VBS 的隔离环境中执行代码完整性验证、内核内存页只有在通过验证之后才可执行且可执行页不会变成可写,以及「内存完整性」与「HVCI」指的是同一个功能。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Support, Device security in the Windows Security app. 关于内核隔离是通过在内存中隔离 Windows 核心进程来防御恶意软件的一组功能;内存完整性(HVCI) 是让恶意程序更难通过低级驱动程序劫持电脑的功能,可用开关开启/关闭;硬件虚拟化需要在 UEFI/BIOS 中启用;以及驱动程序不兼容时要向设备制造商确认更新后的驱动程序。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Learn, Memory integrity and VBS enablement. 关于内存完整性在 Windows 11 的全新安装中若硬件兼容则默认启用而升级不会自动启用;自动启用的硬件条件(CPU 世代・8GB 内存・64GB SSD・受支持的驱动程序・已启用虚拟化);由
WasEnabledBy/EnabledBootId控制的启动失败时自动禁用的安全装置;用 msinfo32 与 Windows 安全中心确认状态;以及可以在 CodeIntegrity 操作日志的事件 ID 3087 中确认被阻止的驱动程序。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 -
Microsoft Learn, Virtualization-based Security (VBS). 关于 VBS 用硬件虚拟化与 Windows 虚拟机监控程序构建隔离环境、以内核可能被侵害为前提作为操作系统信任的起点、SLAT 是 VBS 的必要条件,以及支持内存完整性的驱动程序与安全启动是前提。 ↩ ↩2
-
Microsoft Learn, Manual installation steps for older versions of WSL. 关于要使用 WSL 2 需要启用「虚拟机平台」这个可选功能。 ↩ ↩2 ↩3
-
Microsoft Learn, Windows Sandbox. 关于 Windows 沙盒是使用 Windows 虚拟机监控程序的轻量桌面环境,通过「启用或关闭 Windows 功能」中的「Windows 沙盒」可选功能启用。 ↩ ↩2
-
Microsoft Learn, Enable virtualization-based protection of code integrity. 关于内存完整性在 Intel Kaby Lake 及以后的 Mode-Based Execution Control 与 AMD Zen 2 及以后的 Guest Mode Execute Trap 上运行得更好,而更老的处理器依赖名为 Restricted User Mode 的模拟因此性能影响更大;Windows 安全中心中的设置位置与 22H2 及以后的警告显示;组策略的 UEFI 锁;
HypervisorEnforcedCodeIntegrity下的Enabled・Locked注册表值;只启用 VBS 的配置;WasEnabledBy造成的界面灰显;Win32_DeviceGuard各属性的含义(SecurityServicesRunning的 2 是内存完整性,AvailableSecurityProperties的 7 是 MBEC/GMET);用 msinfo32 确认;以及不兼容驱动程序造成启动失败的警告与从 Windows RE 恢复的步骤。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 -
Microsoft Learn, Virtual Secure Mode. 关于 Mode-Based Execution Control(MBEC) 让内存的执行保护可以分成用户模式执行(UMX)与内核模式执行(KMX) 分别设置。 ↩
-
Riot Games Support, Error VAN: RESTRICTION. 关于 Vanguard 在 Windows 11 上把 HVCI(内存完整性)用于系统完整性的验证,若无法正确启动就阻止游戏启动;以及它指引用户分别启用错误消息中列出的安全功能(TPM 2.0、安全启动、内存完整性、IOMMU)。 ↩
-
Microsoft Learn, Configure Credential Guard - Disable Credential Guard with UEFI lock. 关于带 UEFI 锁启用时设置保存在 EFI(固件)变量中,因此需要先禁用策略或注册表的设置,再用
bcdedit删除 EFI 变量,并在重启时于该电脑前批准出现的 UEFI 更改确认提示。 ↩
相关文章
共享相同标签的最新文章。可以围绕相近的主题进一步加深理解。
磁盘使用率 100% 要停掉什么才能好?──分辨 SysMain、Windows Search 与 Defender
从处理量、响应时间和文件三个角度厘清 Windows 磁盘使用率 100% 的原因。图解 SysMain 的临时停止与恢复、Windows Search 搜索范围的调整,以及不停用 Defender 的调查方法。
同样是 1GB,为什么复制照片文件夹比复制一部视频还慢?
图解 Windows 中容量相同、复制耗时却不同的原因。梳理文件数量、SSD 与 NAS 的等待时间、打包成 ZIP 的效果、把创建·传输·解压都算进去的对比步骤,以及 robocopy 的适用场景。
Windows 的“硬件加速 GPU 计划”是什么?打开就会变快吗?
面向普通用户图解 Windows 的硬件加速 GPU 计划(HAGS):它改变了什么、开与关如何判断、设置项不显示的原因、与帧生成的关系,以及安全的对比步骤。
Windows 虚拟化的深层(第 2 回)── 连内核也读不到的内存:VBS、HVCI 与 Credential Guard 的机制
在兼容硬件上全新安装时默认启用的 VBS,用虚拟机监控程序与 SLAT 造出比内核更强的隔离。本文讲解 VTL、安全内核、HVCI 与 Credential Guard 的结构。
Windows的TPM是什么 ── 图解「不外泄密钥的保险柜」与度量启动
用图解说明TPM。整理密钥不外流到芯片外的机制、PCR与度量启动、BitLocker和Windows Hello中的用法、dTPM・fTPM・Pluton的区别、用Get-Tpm确认状态的方法,以及被要求输入恢复密钥时的应对,全部立足于实务视角。
相关主题
与本文相近的主题页面。以本文为起点,可以进一步了解相关服务和其他文章。
Windows 技术主题
汇整 KomuraSoft LLC 关于 Windows 开发、故障调查与既有资产活用文章的主题中心。
常见问题
汇总了咨询这一主题时常见的问题。
- 内存完整性(HVCI)是什么?
- 它是 Windows 安全中心「设备安全性」>「内核隔离」里的功能,正式名称是「虚拟机监控程序保护的代码完整性(HVCI)」。它在虚拟机监控程序构建的隔离环境中对加载进内核(操作系统核心)的驱动程序做签名验证,只让通过验证的页可执行,并且不允许对可执行页写入。这个功能是为了让恶意程序更难通过低级驱动程序劫持电脑。
- 关掉内存完整性真的会变快吗?
- 有的配置会变快,有的配置几乎没有变化。Microsoft 说明过,在游戏设备的部分场景和部分配置中,内存完整性与虚拟机平台可能带来性能影响。容易出现影响的是没有 Mode-Based Execution Control(Intel 从第 7 代开始搭载)或 Guest Mode Execute Trap(AMD 从 Zen 2 开始搭载)的老 CPU,这时会改用模拟来代替,性能影响就更大。另一方面,如果游戏的瓶颈在 GPU,或者变慢的原因是内存不足、磁盘、发热、电源模式,那么关掉也不会变。在自己的电脑上以相同条件实测再判断才可靠。
- 请告诉我关掉内存完整性的步骤。
- 打开 Windows 安全中心,在「设备安全性」>「内核隔离详细信息」中把「内存完整性」的开关关掉,然后重启电脑。不重启设置就不会生效。如果开关是灰色的并显示「此设置由管理员管理」,说明它被组织的策略固定了,请不要自行更改,去找管理员沟通。
- 明明关掉了却没变快,为什么?
- 首先请用 msinfo32(系统信息)的「基于虚拟化的安全性」栏或 PowerShell 的 Win32_DeviceGuard 类,确认它是否真的关掉了。有时是因为没有重启,或者被策略改了回去,所以仍然开着。其次,如果你在用 Hyper-V、WSL 2、Windows 沙盒或虚拟机平台,那么即使关掉内存完整性,虚拟机监控程序本身仍会继续运行。再者,如果变慢的原因本来就不是内存完整性,那么关掉也不会变快。
- 想把内存完整性开回去却开不了(提示有不兼容的驱动程序),该怎么办?
- 在 Windows 安全中心「内核隔离」画面显示的不兼容驱动程序列表中确认对象,把它换成设备制造商提供的更新版驱动程序才是正道。如果是已经不用的设备的驱动程序,删掉也没关系。哪些驱动程序被阻止,也可以在事件查看器的 CodeIntegrity 操作日志(以事件 ID 3087 为代表)中确认。在不兼容的驱动程序还留着的情况下强行开启,Microsoft 并不支持,而且可能导致无法启动。
- 为了游戏关掉之后,另一个游戏启动不了了。
- 一部分反作弊(如 Riot Games 的 Vanguard)在 Windows 11 上把内存完整性(HVCI)用于系统完整性的验证,在 VAN: RESTRICTION 错误中点名 HVCI 的电脑上,不开启它游戏就无法启动。这并不是对所有 Windows 11 电脑一律要求,而是取决于错误里列出了什么。如果属于这种情况,就需要把内存完整性开回去并重启。要不要关掉,请同时看「想要提速的游戏」和「要求 HVCI 的游戏」两边再决定。