Windows 11 关闭 VBS 与内存完整性:原理、注册表与排查指南
1. 先搞清楚“基于虚拟化的安全性”到底在管什么很多人是先在msinfo32里看到那一行“基于虚拟化的安全性正在运行”然后开始到处找怎么关。也有人是反过来的——先发现某个老驱动装不上、某款游戏帧数不对劲、某个虚拟机软件启动就报冲突顺着排查才摸到 VBS 这条线。不管是哪条路径进来的动手之前先把概念掰开能省掉后面一大半来回折腾的时间。基于虚拟化的安全性英文写作 Virtualization-Based Security圈内一般简称VBS。它不是某一个具体的安全功能而是一个“底座”。做法是用 CPU 的硬件虚拟化能力Intel 平台叫 VT-xAMD 平台叫 SVM在正常的 Windows 系统底下再拉起一层很薄的虚拟化环境然后把几项敏感的安全机制塞进这层环境里跑。这样即使主系统被攻破攻击者也够不到那层里保存的东西——思路有点像在自家院子里单独修一间带独立门锁的保险房重要东西不放客厅。这层底座之上跑的东西主要有几个HVCIHypervisor-enforced Code Integrity也就是 Windows 安全中心里那个“内存完整性”、Credential Guard凭据保护、System Guard Secure Launch以及内核模式硬件强制堆栈保护。它们各自管的事不一样但共用同一套虚拟化底座。所以你会看到一个很常见的现象关掉“内存完整性”之后msinfo32里那一行可能从“正在运行”变成“正在运行但未启用所有安全属性”而不是直接跳到“未启用”。这不是没关掉而是底座还在、上面的租客少了一个。为什么 Windows 11 默认就给打开主要是两个背景一是近几年的攻击手法越来越多地转向内核层和凭据窃取传统的杀软拦不住二是新装机的硬件普遍支持微软索性把它设成出厂推荐配置。尤其从 22H2 之后不少 OEM 预装机型和全新安装的镜像默认就把内存完整性打开后续版本对易受攻击驱动的黑名单检查也更严——这块直接影响的就是那些签名老旧、本身有漏洞的驱动。所以真正要判断的是你要关的是整个 VBS 底座还是只需要关掉上面的某一块比如内存完整性这两个目标对应的操作完全不同代价也差得很远。我在后面第 3 节会给两条不同的路径你按自己的实际需求选别一上来就拿最猛的那套命令往上招呼。2. 关之前先算两笔账能得到什么会失去什么2.1 性能账纸面收益和实测收益的差距网上流传最广的说法是“关掉 VBS 游戏帧数暴涨”这话得拆开看。VBS 启用时CPU 要在主系统和安全环境之间做上下文切换加上 HVCI 对内核代码的实时校验确实存在额外开销。但这个开销的大小极度依赖具体负载跑分软件里那套纯 CPU 密集型测试差异往往在个位数百分比而某些对延迟敏感的老游戏、或者加载了大量第三方驱动的场景体感差距会更明显一些。我自己在几台机器上做过对比同一台机器、同一套驱动、同一版本系统只切换 VBS 状态每项跑三轮取中位数大致印象是这样的场景类型关闭 VBS 后的变化幅度说明3DMark 之类综合图形跑分基本在误差范围内显卡是瓶颈CPU 开销被掩盖老款 DX9 / DX11 单机游戏有一定提升帧生成时间更稳对 CPU 调用敏感收益相对明显现代 3A 大作高画质提升有限GPU 先撞墙CPU 那点开销不值一提大型编译、虚拟机密集任务视情况而定未必更快若同时关掉了底层虚拟化虚拟机反而不能用驱动加载、外设兼容兼容性问题明显减少老签名驱动不再被拦这里必须说清楚一点表格里那些“提升”是我自己环境下的观测不代表所有机器都这样。不同 CPU 代际、不同主板固件、不同驱动组合差异可以大到让人怀疑人生。如果你只是听说“关了能提速”就想动手我建议先花十分钟做一次 AB 对比记下当前状态下的帧数或跑分关掉之后再测一遍数据不会骗人。很多时候你会发现真正拖慢你的其实是后台更新、电源计划、或者是某个一直在扫盘的杀软实时监控。2.2 代价清单哪些东西会跟着受影响关 VBS 不是关一个开关那么简单它牵着一串功能。下面这些是我实际遇到过会受影响的内存完整性HVCI这是最直接的一项。关掉之后内核里那些试图执行未签名或签名有问题的代码拦截力度会下降。对普通用户来说未必有感知但对经常装来源不明驱动的机器风险是实打实增加的。凭据保护Credential Guard主要在企业环境用用来隔离域凭据。家用场景基本不涉及关掉影响不大。部分企业合规要求有些单位的终端合规基线里明确要求 VBS 处于运行状态你私自关掉可能在资产核查时被标红。这个得提前问清楚。驱动拦截策略VBS 打开时系统对易受攻击驱动的阻止列表生效更彻底。关掉之后某些老驱动能装上了——这既是好处也是坏处好处是兼容性上来了坏处是那些驱动本身确实有洞。虚拟化相关软件的冲突这条容易被忽略。VBS 占用了底层虚拟化能力某些第三方虚拟化软件虚拟机、模拟器在和它抢资源时会报错或性能骤降。关掉 VBS 常常能让这些软件恢复正常但如果你同时还需要用 Windows 自带的虚拟机平台或者 WSL2那就得仔细权衡别一脚踩空。注意关掉 VBS 之后如果 BIOS 里的 VT-x / SVM 还开着WSL2 和 Windows 沙盒这类依赖“虚拟机平台”的功能通常仍能正常工作。真正会让它们废掉的是在 BIOS 里直接把 CPU 虚拟化关掉或者把“虚拟机平台”这个可选功能卸载。这两件事的动作和后果完全不同别混为一谈。2.3 什么情况下确实值得关我不主张无脑关但以下几种情况我认为关掉是合理选择第一种是老硬件配新系统。CPU 本身支持虚拟化但内存只有 8GBVBS 那层环境又要占一部分日常使用已经开始卡顿这时候关掉换来的是实打实的可用性提升。第二种是专业软件兼容性。某些行业软件尤其是带加密狗、老式内核驱动、特殊采集卡驱动的在 HVCI 开启时直接装不上或蓝屏厂商又短期不更新驱动那只能从系统侧让路。第三种是虚拟机密集使用者。如果你不依赖 Windows 自带的虚拟机平台而是常年用第三方虚拟机做实验环境且明确感受到资源冲突关掉 VBS 能减少一层占用。第四种是明确知道自己要什么的折腾党。愿意承担风险、能自己判断来源、不把机器当生产工具那随便折腾没问题。反过来说如果你机器上存着工作资料、财务数据、或者你是那种“看到弹窗就点允许”的使用习惯我诚恳建议留着它。这点性能不值得拿数据安全去换。3. 三条路径把“正在运行”改成“未启用”3.1 图形界面路线适合绝大多数人先从最小改动开始如果你只想关掉内存完整性这一块这是最常见的诉求最省事的做法是走 Windows 安全中心打开“Windows 安全中心”左侧选设备安全性。找到内核隔离点进去。把内存完整性的开关拨到关。系统会提示重启重启后生效。这是改动面最小的一条路。关完之后去msinfo32看那一行大概率会变成“正在运行但未启用所有安全属性”。很多人到这一步就以为失败其实不是——底座还在只是 HVCI 这个租客搬走了。对绝大多数游戏和驱动兼容性问题来说这一步已经足够解决。如果你的目标是彻底关掉整个 VBS 底座图形界面里还有个地方要处理Win R输入gpedit.msc家庭版默认没有这个见下面的注意事项。依次展开计算机配置 → 管理模板 → 系统 → Device Guard。找到打开基于虚拟化的安全双击设为已禁用。确定后重启。注意Windows 11 家庭中文版默认不带组策略编辑器强行安装的方法五花八门、稳定性参差。家庭版用户直接跳过这一步用下面 3.2 的注册表路线效果一样还少装一个东西。另外还有一条路径在“启用或关闭 Windows 功能”里把Hyper-V、Windows 虚拟机监控程序平台、虚拟机平台这几个勾去掉。但我要提醒一句这三个是 WSL2、沙盒、以及部分安卓子系统的命根子去掉之后这些功能会直接罢工。除非你确实不用它们否则别碰。很多人为了关 VBS 顺手把“虚拟机平台”也取消了结果第二天发现 WSL2 起不来又回来找原因这就属于自己给自己挖坑。3.2 注册表与命令行路线更彻底但要认清每条命令的作用范围图形界面处理不了的情况比如被策略锁了、家庭版没组策略、或者你想批量处理就得走注册表。以下所有操作都需要管理员权限改之前建议先导出一份注册表备份出问题能回滚。先看 VBS 主开关的位置Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard] EnableVirtualizationBasedSecuritydword:00000000 RequirePlatformSecurityFeaturesdword:00000001EnableVirtualizationBasedSecurity设为 0 表示不启用 VBS。RequirePlatformSecurityFeatures里1 代表仅要求安全启动3 代表安全启动加 DMA 保护这个值在关闭状态下影响不大保持默认即可。接着是 HVCI 这一块它藏在子键里[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity] Enableddword:00000000 Lockeddword:00000000Enabled是 0 关、1 开。重点在Locked这个值如果它是 1说明这一项被 UEFI 层面锁定了你在系统里改注册表它也不认。要解锁得先回到 Windows 安全中心把内存完整性开关关掉并重启让系统自己把Locked复位成 0之后注册表的修改才会真正生效。这是很多人“改了没用”的根本原因。凭据保护在另一个位置[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA] LsaCfgFlagsdword:00000000家用机器基本可以忽略这项企业机器改之前务必确认合规要求。命令行侧用 PowerShell 读状态比改更方便改的话推荐用reg addreg add HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 0 /f reg add HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v Enabled /t REG_DWORD /d 0 /f改完必须重启不重启一切读数都是旧的。这里要重点说一个被滥用的命令bcdedit /set hypervisorlaunchtype off。很多教程把它当成“关闭 VBS 的终极手段”但它关掉的是整个虚拟机监控程序的启动。后果是 VBS 确实不运行了同时 WSL2、Windows 沙盒、以及所有依赖 Hyper-V 的东西一起停摆。如果你只是想让msinfo32那一行变成“未启用”用上面的注册表方案就够了没必要动引导配置。真要动改回来也简单把off换成auto再重启即可但中间这段时间你的虚拟化相关功能是瘫的。3.3 多系统与离线环境的处理DISM 挂载的正确姿势如果你是在做系统镜像定制、批量部署或者机器上有多套系统需要统一处理在线改注册表就不合适了得用 DISM 挂载映像离线修改。基本流程是先查看映像信息确认要改的索引然后挂载dism /Get-WimInfo /WimFile:D:\sources\install.wim dism /Mount-Wim /WimFile:D:\sources\install.wim /Index:1 /MountDir:C:\Mount挂载成功后用reg load把离线系统的注册表配置单元加载进来reg load HKLM\OFFLINE C:\Mount\Windows\System32\config\SYSTEM reg add HKLM\OFFLINE\ControlSet001\Control\DeviceGuard /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 0 /f reg unload HKLM\OFFLINE这里有个坑离线系统里的键路径是ControlSet001而不是CurrentControlSet因为CurrentControlSet是个运行时链接。写错路径的话命令会“成功”但实际什么都没改。改完记得先reg unload卸载配置单元再dism /Unmount-Wim /MountDir:C:\Mount /Commit提交顺序反了会报占用。如果是已经部署好的多系统机器比如双系统想改另一个系统的设置思路一样挂载那个系统的分区加载它的 SYSTEM 配置单元改完卸载。但要注意那个系统如果开了快速启动注册表可能处于休眠状态的锁定中得先在那个系统里完全关机不是睡眠、不是快速启动再操作。4. 改完怎么确认读数的方法和每种读数的含义4.1 msinfo32 的几行字含义差别很大Win R输入msinfo32在“系统摘要”里找这几行。常见的显示有这么几种正在运行VBS 底座和至少一项安全服务都在跑。这是出厂默认状态。正在运行但未启用所有安全属性底座还在但某些服务通常是 HVCI被关了。这时候如果你在 BIOS 里把虚拟化关掉它会变成未启用但代价是别的虚拟化功能一起没了。未启用底座没起来这是我们要的结果。通常意味着 VBS 主开关被关或者 CPU 虚拟化在固件层被禁用。除此之外同一页面往下翻还能看到“已检测到虚拟机监控程序”之类的条目。这个条目和 VBS 状态是相关的但不等价有些第三方虚拟化软件运行时会占用这块导致它显示“是”。所以别只盯着这一行下结论要结合起来看。4.2 用 PowerShell 读准确数值比看文字描述靠谱想看精确状态用这条命令Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Select-Object VirtualizationBasedSecurityStatus, SecurityServicesConfigured, SecurityServicesRunning返回的三个字段里VirtualizationBasedSecurityStatus是最关键的数值含义0未启用这就是我们要达到的状态1已启用但当前未运行2已启用并正在运行另外两个字段SecurityServicesConfigured和SecurityServicesRunning是数组里面每个数字代表一项服务数值对应服务1Credential Guard凭据保护2HVCI内存完整性3System Guard Secure Launch4SMM Firmware Measurement5内核模式硬件强制堆栈保护比较典型的对比是这样的关闭前VirtualizationBasedSecurityStatus是 2SecurityServicesRunning里能看到 2甚至 1、2 都有关闭 HVCI 之后如果 VBS 底座还在状态可能仍是 2但SecurityServicesRunning里的 2 消失了。如果你把主开关也关了重启后状态才会变成 0。这就是为什么我一直强调要先明确目标再操作否则你看到的数值变化会让你误判。4.3 双向核对避免被缓存骗了有一点必须提醒这三个字段在某些系统上存在刷新延迟尤其是刚重启完立刻查询偶尔会读到旧值。我的习惯是重启后等两三分钟再查并且用两条不同路径交叉验证——一条是 PowerShell 的 CIM 查询另一条是注册表reg query HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard /v EnableVirtualizationBasedSecurity reg query HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity /v Enabled如果注册表显示 0但 CIM 里状态还是 2那多半是某项服务被策略强制拉起或者Locked值还锁着。这种情况就得回到第 5 节去排查了。另外systeminfo命令的最后几行也会列出 Hyper-V 的各项要求是否满足如果那几行显示“已检测到虚拟机监控程序”说明底层还跑着东西和 VBS 状态互相印证着看更准。5. 关了又自己“复活”的排查实录5.1 最常见的几个元凶这是被问得最多的问题明明关了重启一看又变成“正在运行”。按我的排查经验概率从高到低大概是这几个第一Locked没复位。内存完整性的 UEFI 锁定是独立于普通注册表开关的。如果你之前是通过策略批量开启过或者 OEM 出厂就用策略锁了那Locked会是 1。这时候你得先关闭它的策略来源组策略或本地策略重启让Locked变成 0注册表才改得动。直接硬改注册表是无效的改完了系统还会按锁定值恢复回去。第二组策略优先级压过注册表。域环境里这条最常见本地改了登录后域策略一刷新全被打回。排查方法是gpresult /h C:\gp.html导出结果搜索 Device Guard 相关的条目看看到底是哪条策略在起作用以及它的来源是本地还是域。找到源头去改比在终端反复折腾有效得多。第三OEM 预装的管理工具。一些品牌的整机自带系统管理软件会在启动时把安全配置恢复成出厂状态其中就包括 VBS 相关项。这种最隐蔽因为你在系统设置里找不到任何痕迹。判断方法是干净启动msconfig里禁用所有非微软服务后观察是否还会恢复如果干净启动下不恢复那就是某个第三方服务干的逐个启用来定位。第四Windows 更新后的重置。大版本更新比如从 21H2 升到更高版本有时候会把安全默认值重新应用一遍。这个没法完全避免只能更新后复查一次。热词里提到的那些版本号其实反映的就是大家对不同版本行为差异的困惑——同样一个开关在不同版本上的默认策略和恢复行为确实可能不一样别拿老教程直接套新系统。5.2 排查顺序表遇到反复复活按这个顺序走能少走弯路步骤检查项判断依据1看Locked的值为 1 说明被锁定先解锁2导出组策略结果看是否有策略强制启用3干净启动测试排除第三方服务干扰4检查设备加密状态某些机型会联动恢复安全配置5检查固件设置少数主板固件里有独立的开关项6复查注册表键路径确认没改到ControlSet002等非活动副本第 6 条听起来很蠢但我确实踩过。多系统或者经历过异常关机的机器上注册表里可能同时存在ControlSet001和ControlSet002CurrentControlSet指向哪个是动态决定的。如果你改的是非活动的那个重启后系统切到另一个你的修改自然就“消失”了。确认方法是查HKLM\SYSTEM\Select下的Current值它告诉你当前用的是哪个 ControlSet。5.3 一个容易被忽略的细节还有一类情况是“看着复活其实没复活”。有些安全软件或者硬件检测工具会读缓存里的旧状态来显示导致界面上一直是“正在运行”。这时候以 PowerShell 的 CIM 查询结果为准别信第三方工具的面板。我自己就遇到过一个外设管理软件界面一直显示内存完整性开着实际上早就关了白白多折腾了半小时。实操心得每次改完这类底层安全配置我的固定动作是——重启、等三分钟、跑一遍 CIM 查询、再跑一遍bcdedit /enum {current}看引导项有没有被动过。四步下来基本能确认状态省得后面反复怀疑。6. 和这件事经常一起出现的几个坑6.1 WSL2 报“未启用虚拟化”和 VBS 不是一回事这是热词里出现频率很高的一条值得单独说清楚。WSL2 报“因为此计算机上未启用虚拟化”原因是虚拟机平台或底层虚拟化能力不可用跟 VBS 开没开是两码事。具体分几种情况如果 BIOS 里 VT-x / SVM 被关了那 WSL2、第三方虚拟机、VBS 一起报废这是最彻底的得进固件打开。如果是“虚拟机平台”这个可选功能没勾上那 WSL2 起不来但 VBS 可能照样运行因为 VBS 依赖的是更底层的虚拟化扩展不完全依赖那个可选功能包。还有一种情况是bcdedit里hypervisorlaunchtype被设成了off——这通常是为了关 VBS 而顺手改的结果把 WSL2 也一起干掉了。改回来bcdedit /set hypervisorlaunchtype auto然后重启。这个命令和 3.2 节里说的对应关系要记住关 VBS 用注册表别动引导项。动引导项是杀敌一千自损八百的做法。顺便说一句如果你既想关 VBS 又想保 WSL2注册表方案是可行的因为 WSL2 走的是虚拟机平台那条路和 VBS 的底层环境可以共存只要别把“虚拟机平台”这个功能勾掉就行。这个组合我在好几台机器上验证过是能跑通的。6.2 第三方虚拟机和 Hyper-V 的共处问题用 VMware 或 VirtualBox 做实验环境的人经常遇到性能骤降或启动报错。根因是 Hyper-V 一旦启用就会占据 CPU 的虚拟化根模式第三方虚拟机只能退到兼容模式运行效率自然打折。这时候关掉 VBS 通常能让情况好转但如果机器上还开着“虚拟机平台”功能冲突依然存在。真正想彻底让第三方虚拟机跑满性能得把 Hyper-V、虚拟机监控程序平台、虚拟机平台这几个功能全部取消勾选代价就是 WSL2 和沙盒一起不能用。这就是一个典型的取舍问题没有两全方案。我的建议是按主力用途定日常开发用 WSL2 多就留着主要用第三方虚拟机做渗透测试或系统实验就关掉全家桶。别在两者之间反复横跳每次切换都要重启时间成本划不来。6.3 几个常见误区顺带澄清几个经常被混淆的说法“关掉防火墙能提升性能”——这是另一个话题而且防火墙对性能的影响在现代硬件上基本可以忽略关掉它换来的是实打实的暴露风险不划算。“Windows 11 家庭版没法治”——恰恰相反家庭版因为没有组策略编辑器反而少了一条策略来源用注册表改往往更直接。真正的麻烦在域环境不在家庭版。“关了 VBS 就一定能装老驱动”——不一定。驱动装不上还可能是因为驱动的签名证书过期、或者被易受攻击驱动列表单独拦截VBS 只是其中一环。遇到这类问题先看具体报错代码别急着归因到 VBS 上。最后说我个人的做法生产主力机上我留着内存完整性只在一台专门用来跑老游戏和做兼容性测试的机器上关掉而且关之前导出过注册表备份、做过一次完整系统镜像。这样即使后面想恢复reg import一下、或者直接还原镜像就行不用重新摸一遍路。折腾系统底层设置这件事留条后路比省那点时间重要得多。