内存完整性(HVCI):实测代价,以及什么时候该保留
在 Windows 11 26H2 上实测 HVCI 开关对 CPU 加密、压缩和内存带宽的影响,并说明 VBS 状态检查、驱动兼容与关闭边界。
- 版本号
- 26300.9457
- 版本
- Pro (26H2)
- 架构
- x64
- 支持
- 实验室(HVCI 实测)
- 证据
- E2实验室复现, 直通虚拟机实测
- 风险
- R1可回滚设置
- 核验日期
- 2026-10-28
- 测试机
- PVE 9.2.2 VM 361;Windows 11 Pro 26H2 26300.9457;4 vCPU/8GB;CPU host;HVCI 关闭/开启各 3 轮 WinSAT
- 页面类型
- 实测调优
内存完整性(Memory integrity)是 HVCI 的界面名称,全称是“虚拟机监控程序强制的代码完整性”。它是 VBS(基于虚拟化的安全)下的一项服务:把内核代码完整性检查放进 hypervisor 隔离的安全内核里,让内核级恶意代码更难篡改。
本次实验里,打开 HVCI 后,三项合成 CPU/内存测试都没有出现可重复的变慢:
| 测试(3 轮中位数) | HVCI 关闭 | HVCI 开启 | 差异 |
|---|---|---|---|
| CPU AES256 加密 | 4245.6 MB/s | 4246.3 MB/s | +0.02% |
| CPU LZW 压缩 | 457.7 MB/s | 461.3 MB/s | +0.78% |
| 内存带宽 | 33878.6 MB/s | 34033.8 MB/s | +0.46% |
这些差异小于同一状态内的轮次波动。正号是噪声,不代表 HVCI 会让 CPU 变快。
结论:默认保留内存完整性。 本次测到的 CPU/内存代价在噪声以下,而内核安全边界是真实的。只有明确点名的不兼容驱动,或你实际负载里可重复的退化,才值得关闭。
VBS 不等于 HVCI
Section titled “VBS 不等于 HVCI”网上大部分误判都来自把这两个概念混在一起:
| 层级 | 是什么 | 怎么看 |
|---|---|---|
| VBS | hypervisor 隔离出来的安全环境 | VirtualizationBasedSecurityStatus = 2 表示 VBS 在运行 |
| HVCI | VBS 下的一项服务:内核/驱动代码完整性 | SecurityServicesRunning 包含 2 |
| Credential Guard | 另一项 VBS 服务:保护派生凭据 | SecurityServicesRunning 包含 1 |
| System Guard | 另一项 VBS 服务:启动/系统完整性 | SecurityServicesRunning 包含 3 |
机器完全可能 VBS 在运行,但 HVCI 没开。本次基线就是这样:
VirtualizationBasedSecurityStatus : 2SecurityServicesConfigured : {0}SecurityServicesRunning : {0}{0} 表示没有任何 VBS 安全服务在跑。打开内存完整性后变成:
VirtualizationBasedSecurityStatus : 2SecurityServicesConfigured : {2}SecurityServicesRunning : {2}这时才是 HVCI 真正在运行。
HVCI 保护什么,不保护什么
Section titled “HVCI 保护什么,不保护什么”HVCI 会:
- 在内核代码页执行前做完整性检查;
- 让有漏洞的驱动或内核漏洞更难运行未签名/被修改的代码;
- 通过微软的易受攻击驱动阻止列表拦下已知问题驱动;
- 属于内核/驱动安全,不是杀毒软件,也不是用户态沙箱。
它不会:
- 拦钓鱼、恶意文档或浏览器漏洞;
- 替代 Secure Boot、TPM、Windows Update 或 SmartScreen;
- 因为驱动有签名就保证它安全;
- 让游戏变快。
真实代价通常在兼容性,不是纯 CPU 吞吐:老反作弊、超频/风扇/RGB 工具、VPN/防火墙过滤驱动、模拟器、采集卡驱动都可能被拦或不稳定。某一台机器因此保留 HVCI 关闭是合理的;“能多几帧”不是合理理由,除非你测过。
先看当前状态
Section titled “先看当前状态”Get-CimInstance -Namespace root\Microsoft\Windows\DeviceGuard -ClassName Win32_DeviceGuard | Select-Object VirtualizationBasedSecurityStatus, SecurityServicesConfigured, SecurityServicesRunning, CodeIntegrityPolicyEnforcementStatus预期结果: 能区分 VBS 状态,以及 SecurityServicesRunning 里是否有 HVCI(2)。
怎么读:
| 值 | 含义 |
|---|---|
VirtualizationBasedSecurityStatus = 0 |
VBS 关闭 |
= 1 |
VBS 已启用但未运行 |
= 2 |
VBS 正在运行 |
SecurityServicesRunning 包含 2 |
HVCI 正在运行 |
不包含 2 |
HVCI 没开,哪怕 VBS 是 2 |
msinfo32 也会显示 “Virtualization-based security” 相关行,但 DeviceGuard 对象更精确,因为它把 VBS 和每项服务分开。
打开内存完整性
Section titled “打开内存完整性”普通 Windows 11 路径:
- 打开 Windows 安全中心。
- 进入 设备安全性 → 内核隔离详细信息。
- 打开 内存完整性。
- 重启。
预期结果: 内存完整性为“开”,Windows 要求重启。
重启后再跑一次 DeviceGuard 命令。SecurityServicesRunning 必须包含 2;界面上的绿色开关本身不能证明服务已经启动。
实验室或受控测试机可以用等价策略:
$dg = 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard'New-ItemProperty $dg -Name EnableVirtualizationBasedSecurity -PropertyType DWord -Value 1 -ForceNew-ItemProperty $dg -Name RequirePlatformSecurityFeatures -PropertyType DWord -Value 1 -Force
$hvci = Join-Path $dg 'Scenarios\HypervisorEnforcedCodeIntegrity'New-Item -Path $hvci -ForceNew-ItemProperty $hvci -Name Enabled -PropertyType DWord -Value 1 -Force
bcdedit.exe /set '{current}' hypervisorlaunchtype auto# 重启RequirePlatformSecurityFeatures = 1 要求 Secure Boot;3 还要求 DMA 保护。按平台实际支持选值。
要关闭,把 HVCI 的 Enabled 改成 0 再重启。看完下面的取舍再动。
方法:
- 同一台 VM 361,Windows 11 Pro 26H2
26300.9457,4 vCPU / 8GB,CPUhost。 - HVCI 关闭(
{0})与开启({2})各 3 轮。 winsat cpu -encryption、winsat cpu -compression、winsat mem;直接解析 XML 指标。- 客户机空闲,同一宿主、同一时间段;无 GPU 负载。
结果(3 轮中位数):
| 测试 | HVCI 关闭 | HVCI 开启 | 开启 vs 关闭 |
|---|---|---|---|
| CPU AES256 加密(MB/s) | 4245.6 | 4246.3 | +0.02% |
| CPU LZW 压缩(MB/s) | 457.7 | 461.3 | +0.78% |
| 内存带宽(MB/s) | 33878.6 | 34033.8 | +0.46% |
轮次范围:
| 测试 | 关闭 | 开启 |
|---|---|---|
| AES256 | 4237.6–4256.1 | 4221.7–4249.8 |
| LZW | 455.5–459.4 | 453.3–463.0 |
| 内存 | 33828.2–33955.2 | 34033.8–34347.0 |
开关差异都落在轮次波动内。诚实的结论是:
在这台 VM 的这三项合成负载里,没有检测到可重复的 CPU 或内存带宽代价。这不证明 HVCI 在游戏、驱动或开机路径上免费。
在自己机器上测
Section titled “在自己机器上测”不要只看一轮,也不要跨电源模式、显卡驱动或后台负载比较。
winsat cpu -encryption -xml $env:TEMP\enc-off.xmlwinsat cpu -compression -xml $env:TEMP\comp-off.xmlwinsat mem -xml $env:TEMP\mem-off.xml重复 3 次。winsat 需要交互式桌面会话;以 SYSTEM 运行且没有 DWM 时会退出 24。
预期结果: 三次非零 XML 结果,记录中位数。
winsat cpu -encryption -xml $env:TEMP\enc-on.xmlwinsat cpu -compression -xml $env:TEMP\comp-on.xmlwinsat mem -xml $env:TEMP\mem-on.xml预期结果: SecurityServicesRunning 包含 2;三项测试生成新的 XML。
真实游戏要测帧时间和 1% low,不要只看平均 FPS;一次只改一个变量。1–2% 的合成差异通常是噪声;同一场景可重复的 10% 下降才值得查。
保留还是关闭
Section titled “保留还是关闭”建议保留内存完整性,如果:
- 这台机器用于网银、工作、开发,或任何在意内核级恶意代码的场景;
- 你的驱动和反作弊都能在开启状态下工作;
- 你没有在实际负载里测到可重复的退化。
只有这些情况才考虑关闭:
- Windows 安全中心明确点名某个不兼容驱动,且没有更新;
- 必需的反作弊、虚拟机、采集卡或硬件工具在 HVCI 开启时失败;
- 你在实际使用的负载里有可重复的前后对比退化,而不是一次合成分数;
- 这是实验/测试 VM,安全取舍可接受。
关闭后要记录原因,并在驱动/厂商修复后重新打开。“FPS 高了”但没有受控测量,不是关闭内核安全边界的理由。
| 现象 | 常见原因 | 先做什么 |
|---|---|---|
| 开关灰色 / “由管理员管理” | 组策略、Intune 或注册表策略 | gpresult /h 查策略;问管理员;不要绕过管理 |
VBS 显示运行,但 HVCI 不在 SecurityServicesRunning |
HVCI 场景 Enabled 缺失/为 0,或没重启完 |
写 HVCI 策略、重启,再确认 {2} |
| 内存完整性打不开 | Secure Boot/TPM/虚拟化不满足,或驱动阻止 | 查固件、Confirm-SecureBootUEFI、Get-Tpm;看安全中心的驱动列表 |
| 开启后开机蓝屏/循环 | 驱动或固件不兼容 | 进安全模式/回滚快照;不要反复强开 |
| 提示“内存完整性已关闭”并列出驱动 | Windows 发现不兼容驱动 | 先更新/移除该驱动;关闭 HVCI 是最后手段 |
| WSL2/Hyper-V 不工作 | 通常与 HVCI 无关;查 Virtual Machine Platform 和嵌套虚拟化 | 重查 wsl --status;VM 里要把虚拟化暴露给 guest |
| 感觉变慢 | 心理预期、后台负载、显卡驱动,或真实退化 | 同一负载重复 3 次;比帧时间,不比单次 FPS |
这篇验证了什么
Section titled “这篇验证了什么”| 结论 | 证据 |
|---|---|
HVCI 关闭 → 开启,SecurityServicesRunning 从 {0} 变 {2} |
E2,VM 361 的 DeviceGuard |
| CPU AES256、LZW、内存带宽的中位数 | E2,各 3 轮,XML 指标 |
| 这三项合成负载没有可重复退化 | E2,差异在轮次范围内 |
| Windows 安全中心显示内存完整性为开 | E2,截图 |
| HVCI 开启时 WSL2/Ubuntu 仍能启动 | E2,whoami=dev、内核 6.18;有嵌套 VM 警告 |
| 游戏 FPS/帧时间、开机时间、驱动兼容矩阵、电池 | 未测试 |
| HVCI 能提升性能 | 不声称;小的正差异是噪声 |
- 游戏测量:先测帧时间,再调优:平均 FPS 会掩盖卡顿。
- WSL2 + Dev Drive 装到 D 盘:本次实验中 HVCI 开启后 WSL2 仍能启动。
- 新机开荒 10 分钟:先完成安全默认值,再谈调优。
- 虚拟化开关:VT-x、IOMMU、SLAT 与嵌套支持——HVCI/WSL2 工作前固件必须暴露什么。
- 大小核与 Windows 调度器——后台任务为什么落在 E 核。
