永久关闭vbs提升性能,同时保留WSL/WSA的方法
马凌曙
2024年01月30日 09:48

【前排提醒】

本方法存在以下缺点:

1、需要对uefi操作且操作略为复杂,操作不当可能导致恶劣后果;

2、开机变慢三秒左右;

3、可能影响安全性,请不要在存放敏感信息的计算机使用该方法。

—【以下原理,不想看可直达安装教程】—

众所周知,win11默认启用的vbs会对电脑性能造成负面影响(从百分之一至二到百分之五至十不等,视情况而定,对游戏玩家较为显著)

然而网上关闭vbs的方法(类似于bcd set Hypervisor off)比较草率,一般会使wsl,wsa失效。

稍高级的方法(使用secconfig.efi)可以让二者并存,但重启后就会失效。

【此方法(也是微软官方在知识库中提供的方法)的原理是secconfig.efi对uefi var参数修改,重启后系统在正常启动内核过程中读取efi var中的参数,如果存在DisableVBSPolicy就关闭vbs,然后在内核启动成功后将该参数删除(官方文档解释是由于存在UEFI LOCK,这个东西我不清楚具体是什么)——这也是重启即失效的原因。】

*参考资料:

Github项目:

Mattiwatti/EfiGuard、realoriginal/preboot,

相关论文:

x邦x全局 docplayer.net/151440538-Work-package-6-virtual-secure-mode-version-1-0.html 2.1.1,3.2

官方文档: https://learn.microsoft.com/zh-CN/windows/security/identity-protection/credential-guard/configure

其他教程: 网页链接​

既然这种设计是微软特意为之,那么通过正规途径修改就行不通了。

曾经考虑通过Opencore启动Windows,作为黑苹果引导工具其能够修改EFI var,但不知为何没有奏效(怀疑是变量类型不同)。那么只好考虑现成的轮子了——有请本文主角EfiGuard! https://github.com/Mattiwatti/EfiGuard

简而言之,这个项目可以通过hook并patch windows的核心模块对启动流程进行修改。可以通过启动项链式启动并修改windows,也可以通过加载uefi驱动直接修改原有启动项。因第一种方法不够优雅而且无法消除开机前选项,本文选用第二种方法。

然而,这个项目会把启动日志直接输出在屏幕上,每次开机惨绿跑马很是难受。作者解释为安全原因,倒也可以理解。

强迫症发作,我修改了源码并成功编译出了启动不跑码的干净版本(碎碎念:edk2的环境太难配了,特别是最新版的和源码不兼容,装了一天快折磨疯了),提供给大家。

——【安装教程】——

0.下载 https://wwm.lanzout.com/b03ff3k3a?password=uefi

1.在BIOS里关闭Secure boot;

Win+R,gpedit.msc,组策略(计算机配置>管理模板>系统>Device Guard>打开虚拟化的安全)为“已禁用”;

关闭设置-安全中心的全部开关(尤其是内存完整性,安全中心里的东西能都关就都关吧,这玩意也吃性能);

Win+R,regedit.exe,

1.0如下2项必须全部删除,把路径粘贴到"计算机\"四个字符后面回车,或者手输也行,敲回车找到对应的项,右键删除(没有该项就跳过):

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\EnableVirtualizationBasedSecurity

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\RequirePlatformSecurityFeatures

1.1需要修改的值,以下两项的值为0,如果没有就新建DWORD:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\LsaCfgFlags

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\LsaCfgFlags

2.解压EFI.zip,打开diskgenius,左侧找到标记为SYSTEM_DRV的盘,双击打开efi文件夹,进入efi中的boot目录,将两个efi拷贝进去;

3.打开bootice,UEFI-修改启动序列;

然后点击添加,输入如下配置,然后保存;

4.重启开机按Fx(依电脑而异)进入启动项选择,进入后马上按esc,然后输入bcfg driver add 0 fs0:\EFI\Boot\EfiGuardDxe.efi "EfiGuardDxe"回车,然后强制重启。

(把add换成rm可卸载本驱动)

5.回到Windows,Win+R,msinfo32,看看基于虚拟化的安全性是否关闭了?