# 内存完整性（HVCI）：实测代价，以及什么时候该保留

> 在 Windows 11 26H2 上实测 HVCI 开关对 CPU 加密、压缩和内存带宽的影响，并说明 VBS 状态检查、驱动兼容与关闭边界。

**测试环境**

- 版本号: 26300.9457
- 版本: Pro (26H2)
- 架构: x64
- 证据: E2, M-V
- 风险: R1
- 核验日期: 2026-10-28
- 测试机: PVE 9.2.2 VM 361；Windows 11 Pro 26H2 26300.9457；4 vCPU/8GB；CPU host；HVCI 关闭/开启各 3 轮 WinSAT

VM 361 的 Windows 安全中心 → 内核隔离：内存完整性为“开”。开关只读，因为实验室直接写了策略。点击查看大图。

## 先说结论

**内存完整性**（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/内存代价在噪声以下，而内核安全边界是真实的。只有明确点名的不兼容驱动，或你实际负载里可重复的退化，才值得关闭。

> **警告: 这不是游戏 FPS 结论**
>
> 这台 VM 没有 GPU 直通。上面的数字不能说明帧率、帧时间、驱动延迟或开机时间。游戏要固定同一场景和画质，比较帧时间，不能只看平均 FPS。方法见[游戏测量](https://winbook.fyi/zh/windows/gaming/measure/)。

## VBS 不等于 HVCI

网上大部分误判都来自把这两个概念混在一起：

| 层级 | 是什么 | 怎么看 |
|---|---|---|
| **VBS** | hypervisor 隔离出来的安全环境 | `VirtualizationBasedSecurityStatus = 2` 表示 VBS 在运行 |
| **HVCI** | VBS 下的一项服务：内核/驱动代码完整性 | `SecurityServicesRunning` 包含 **2** |
| Credential Guard | 另一项 VBS 服务：保护派生凭据 | `SecurityServicesRunning` 包含 **1** |
| System Guard | 另一项 VBS 服务：启动/系统完整性 | `SecurityServicesRunning` 包含 **3** |

机器完全可能 **VBS 在运行，但 HVCI 没开**。本次基线就是这样：

```text
VirtualizationBasedSecurityStatus    : 2
SecurityServicesConfigured           : {0}
SecurityServicesRunning              : {0}
```

`{0}` 表示没有任何 VBS 安全服务在跑。打开内存完整性后变成：

```text
VirtualizationBasedSecurityStatus    : 2
SecurityServicesConfigured           : {2}
SecurityServicesRunning              : {2}
```

这时才是 HVCI 真正在运行。

## HVCI 保护什么，不保护什么

HVCI 会：

- 在内核代码页执行前做完整性检查；
- 让有漏洞的驱动或内核漏洞更难运行未签名/被修改的代码；
- 通过微软的易受攻击驱动阻止列表拦下已知问题驱动；
- 属于**内核/驱动安全**，不是杀毒软件，也不是用户态沙箱。

它不会：

- 拦钓鱼、恶意文档或浏览器漏洞；
- 替代 Secure Boot、TPM、Windows Update 或 SmartScreen；
- 因为驱动有签名就保证它安全；
- 让游戏变快。

真实代价通常在**兼容性**，不是纯 CPU 吞吐：老反作弊、超频/风扇/RGB 工具、VPN/防火墙过滤驱动、模拟器、采集卡驱动都可能被拦或不稳定。某一台机器因此保留 HVCI 关闭是合理的；“能多几帧”不是合理理由，除非你测过。

## 先看当前状态

- [ ] **问 Windows 哪些 VBS 服务在运行** (终端（管理员）)

  ```powershell
  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 和每项服务分开。

## 打开内存完整性

普通 Windows 11 路径：

- [ ] **Windows 安全中心 → 设备安全性 → 内核隔离** (设置)

  1. 打开 **Windows 安全中心**。
  2. 进入 **设备安全性 → 内核隔离详细信息**。
  3. 打开 **内存完整性**。
  4. 重启。

  预期结果: 内存完整性为“开”，Windows 要求重启。

重启后再跑一次 DeviceGuard 命令。`SecurityServicesRunning` 必须包含 `2`；界面上的绿色开关本身不能证明服务已经启动。

> **注意: 本次实验用的是注册表策略**
>
> 为了脚本化测试，实验室直接写了策略，所以 Windows 安全中心显示“此设置由管理员管理”。个人电脑请走界面；公司电脑不要绕过组织策略，先问管理员。

实验室或受控测试机可以用等价策略：

```powershell
$dg = 'HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard'
New-ItemProperty $dg -Name EnableVirtualizationBasedSecurity -PropertyType DWord -Value 1 -Force
New-ItemProperty $dg -Name RequirePlatformSecurityFeatures -PropertyType DWord -Value 1 -Force

$hvci = Join-Path $dg 'Scenarios\HypervisorEnforcedCodeIntegrity'
New-Item -Path $hvci -Force
New-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，CPU `host`。
- 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 在游戏、驱动或开机路径上免费。

## 在自己机器上测

不要只看一轮，也不要跨电源模式、显卡驱动或后台负载比较。

- [ ] **打开 HVCI 前先取 CPU 基线** (终端（管理员）)

  ```powershell
  winsat cpu -encryption  -xml $env:TEMP\enc-off.xml
  winsat cpu -compression -xml $env:TEMP\comp-off.xml
  winsat mem             -xml $env:TEMP\mem-off.xml
  ```
  重复 3 次。`winsat` 需要交互式桌面会话；以 SYSTEM 运行且没有 DWM 时会退出 24。

  预期结果: 三次非零 XML 结果，记录中位数。

- [ ] **打开 HVCI、重启，再跑同样的命令** (终端（管理员）)

  ```powershell
  winsat cpu -encryption  -xml $env:TEMP\enc-on.xml
  winsat cpu -compression -xml $env:TEMP\comp-on.xml
  winsat mem             -xml $env:TEMP\mem-on.xml
  ```

  预期结果: SecurityServicesRunning 包含 2；三项测试生成新的 XML。

真实游戏要测**帧时间和 1% low**，不要只看平均 FPS；一次只改一个变量。1–2% 的合成差异通常是噪声；同一场景可重复的 10% 下降才值得查。

## 保留还是关闭

**建议保留内存完整性**，如果：

- 这台机器用于网银、工作、开发，或任何在意内核级恶意代码的场景；
- 你的驱动和反作弊都能在开启状态下工作；
- 你没有在实际负载里测到可重复的退化。

**只有这些情况才考虑关闭**：

- Windows 安全中心明确点名某个不兼容驱动，且没有更新；
- 必需的反作弊、虚拟机、采集卡或硬件工具在 HVCI 开启时失败；
- 你在实际使用的负载里有可重复的前后对比退化，而不是一次合成分数；
- 这是实验/测试 VM，安全取舍可接受。

关闭后要记录原因，并在驱动/厂商修复后重新打开。“FPS 高了”但没有受控测量，不是关闭内核安全边界的理由。

> **危险: 不要为了跑分关闭安全**
>
> 关闭 HVCI 会降低内核保护，原本会被拦下的脆弱或恶意驱动可以加载。如果某个游戏反作弊要求关闭 HVCI，那是兼容性决策：记录它、隔离这台机器，不要用它登录敏感账号。

## 故障排查

| 现象 | 常见原因 | 先做什么 |
|---|---|---|
| 开关灰色 / “由管理员管理” | 组策略、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 |

## 这篇验证了什么

| 结论 | 证据 |
|---|---|
| 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 能提升性能 | **不声称**；小的正差异是噪声 |

## 相关页面

- [游戏测量：先测帧时间，再调优](https://winbook.fyi/zh/windows/gaming/measure/)：平均 FPS 会掩盖卡顿。
- [WSL2 + Dev Drive 装到 D 盘](https://winbook.fyi/zh/windows/dev/wsl2/)：本次实验中 HVCI 开启后 WSL2 仍能启动。
- [新机开荒 10 分钟](https://winbook.fyi/zh/windows/start/first-hour/)：先完成安全默认值，再谈调优。

## 相关

- [虚拟化开关：VT-x、IOMMU、SLAT 与嵌套支持](https://winbook.fyi/zh/hardware/cpu/virtualization-flags/)——HVCI/WSL2 工作前固件必须暴露什么。
- [大小核与 Windows 调度器](https://winbook.fyi/zh/hardware/cpu/hybrid-cores/)——后台任务为什么落在 E 核。

## 来源

- [Microsoft Learn — 内存完整性（HVCI）](https://learn.microsoft.com/zh-cn/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity)
- [Microsoft Learn — Device Guard 与 Credential Guard（VBS/HVCI）](https://learn.microsoft.com/zh-cn/windows-hardware/drivers/bringup/device-guard-and-credential-guard)
- [Microsoft Support — 核心隔离](https://support.microsoft.com/zh-cn/windows/core-isolation-e30ed737-17d8-42f3-a2a9-87521df09b78)
- [Microsoft Learn — OEM 的 VBS](https://learn.microsoft.com/zh-cn/windows-hardware/design/device-experiences/oem-vbs)

---

来源页面: https://winbook.fyi/zh/windows/gaming/memory-integrity/
