内存完整性和 VBS 启用

内存完整性Windows 10、Windows 11 和 Windows Server 2016 或更高版本中提供的启用基于虚拟化的安全性(VBS) 功能。 内存完整性和 VBS 改进了 Windows 的威胁模型,并针对试图利用 Windows 内核的恶意软件提供更强大的保护。 VBS 使用 Windows 虚拟机监控程序创建一个独立的虚拟环境,该环境成为假定内核遭到入侵的操作系统的信任根。 内存完整性是一个关键组件,它通过在 VBS 的独立虚拟环境中运行内核模式代码完整性来保护和强化 Windows。 内存完整性还限制可用于入侵系统的内核内存分配,确保在安全运行时环境中传递代码完整性检查后,内核内存页才会成为可执行文件,并且可执行文件页本身永远不会可写。

注意

内存完整性有时称为虚拟机监控程序保护的代码完整性(HVCI)虚拟机监控程序强制代码完整性,最初作为 Device Guard 的一部分发布。 除了在组策略或 Windows 注册表中存在内存完整性和 VBS 设置外,不再使用 Device Guard。

有关这些保护的更多详细信息,请参阅基于虚拟化的安全系统资源保护

默认启用

在 Windows 11 的全新安装中默认开启内存完整性,以前仅在本文所述的兼容硬件上以 S 模式全新安装 Windows 10 时启用内存完整性。 默认情况下,还在所有安全核心电脑上启用。 在其他不符合内存完整性自动启用要求的系统上,客户可以选择使用有关如何启用内存完整性中所述的任何方法。 IT 专业人员和最终用户始终拥有是否启用内存完整性的最终控制权。

支持自动启用的硬件功能

当电脑满足以下最低硬件功能时,默认情况下启用内存完整性:

组件 详细信息
处理器
  • Intel 第 8 代或更高版本(从 Windows 11 版本 22H2 开始)(仅适用于 Windows 11 版本 21H2 的第 11 代核心处理器和更新版本)
  • AMD Zen 2 体系结构及更高版本
  • Qualcomm Snapdragon 8180 及更高版本
RAM 最低 8GB(仅适用于 x64 处理器)
存储 最小大小为 64GB 的 SSD
驱动程序 必须安装与内存完整性兼容的驱动程序。 有关驱动程序的详细信息,请参阅驱动程序与内存完整性的兼容性
BIOS 必须启用虚拟化

如果生成的映像不会自动启用内存完整性,仍然可以配置映像,使其默认启用。

注意

自动启用仅适用于全新安装,而不适用于现有设备的升级。

注意

中国和韩国市场不包括在内,以避免与这些地区普遍存在的软件存在已知的兼容性问题。

注意

当前默认启用逻辑中不包含英特尔 11 代酷睿桌面处理器。 但是,它们是推荐的内存完整性平台,并且可以由 OEM 启用。

内存完整性和 VBS 控件

本部分列举设备制造商和最终用户如何与内存完整性和 VBS 进行交互。 若要了解如何以管理员身份控制内存完整性状态,请参阅如何启用内存完整性

启用内存完整性

尽管大多数系统默认会打开 Windows 内存完整性,但有几种原因可能会阻止这种情况发生。 作为 OEM,可以通过在 OS 映像中配置注册表项,确保为设备启用内存完整性。

在映像中设置以下两个注册表项,以确保启用内存完整性。

注册表项
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity Enabled=1
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity WasEnabledBy=1
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity EnabledBootId=<Current BootId>

BootId 是一个计数器,每次成功启动时都会递增,可在注册表项中找到:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\BootId WasEnabledByEnabledBootId 注册表项控制防止设备无法启动的设置。 设置后,如果系统在启动过程中崩溃,设备将自动关闭内存完整性,这可能是由于内存完整性阻止了不兼容的启动关键驱动程序所致。 此自动禁用功能仅在 BootId 小于 EnabledBootId + 3 时可用。 在某些版本的 Windows中,自动禁用功能被设计为,即使在内存完整性关闭后,如果启动失败仍在继续,也会恢复,这表明内存完整性不是失败的根本原因。

注意

对于高安全性系统,不应设置 WasEnabledByEnabledBootId

疑难解答

标识内存完整性状态

以下易失性注册键反映了内存完整性的状态:

注册表项
HKLM\System\CurrentControlSet\Control\CI\State HVCIEnabled

检查内存完整性状态的其他方法是查看基于虚拟化的安全服务正在运行下的 MsInfo,或者参阅 Windows 安全应用中的核心隔离设置页面,以查看内存完整性的值。 还有一个 WMI 接口可用于使用管理工具进行检查,请参阅验证已启用 VBS 和内存完整性功能

调试驱动程序问题

检查代码完整性日志,查看是否有任何驱动程序由于内存完整性而被阻止加载。 这些日志位于以下路径下的事件查看器中:

Applications and Service Logs\Microsoft\Windows\CodeIntegrity\Operational

通常,内存完整性兼容性事件的 EventID=3087

检查内存完整性默认启用的结果

若要查看有关内存完整性默认启用结果的详细信息,请检查 setupact.log 并搜索 HVCI。 你应该会看到以下结果日志之一,以及导致启用决策的成功/失败检查:

已启用内存完整性:SYSPRP HVCI: Enabling HVCI

未启用内存完整性:SYSPRP HVCI: OS does not meet HVCI auto-enablement requirements. Exiting now.

如果设备通过前面详细介绍的 regkey 方法选择退出内存完整性启用,那么这将是内存完整性的 sysprep 中的唯一日志。 如果设备存在兼容性问题,则应在前面的日志中标识该问题,并显示以下错误消息:

SYSPRP HVCI: Compatibility did not pass. VBS_COMPAT_ISSUES 0xXXXXXXXX

下面列举了潜在的 VBS 或内存完整性兼容性问题。 每个问题均由位数组中的单个索引表示,并且错误消息输出由存在的每个错误位产生的十六进制值。

位索引 兼容性问题 十六进制值 体系结构
0 不支持的体系结构(例如,x86) 0x00000001
1 需要 SLAT 0x00000002 x64
2 需要安全启动功能 0x00000004 x64
3 需要 IOMMU 0x00000008 X64
4 需要 MBEC/GMET 0x00000010 x64
5 需要 UEFI 0x00000020 x64
6 需要 UEFI WX 内存属性表 0x00000040 x64
7 需要 ACPI WSMT 表 0x00000080 x64
8 需要 UEFI MOR 锁定 0x00000100 x64
9 已放弃
10 需要硬件虚拟化 0x00000400 x64
11 需要安全启动 0x00000800 ARM64
12 已放弃
13 设备无法满足所需的最小卷大小 64GB 0x00002000 x64、ARM64
14 需要系统驱动器 SSD 0x00004000 x64、ARM64
15 需要 Intel CET(仅适用于 W11 21H2) 0x00008000 x64
16 ARM SoC 与 VBS 不兼容 0x00010000 ARM64
17 需要 8GB RAM 0x00020000 x64

错误代码和错误标识示例:VBS_COMPAT_ISSUES 0x000000C0

0x000000C0 -> 0x00000080 AND 0x00000040 ->需要 UEFI WX 内存属性表,需要 ACPI WSMT 表