【前排提醒】
本方法存在以下缺点:
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
其他博客:https://www.bilibili.com/read/cv22719638/
既然这种设计是微软特意为之,那么通过正规途径修改就行不通了。
曾经考虑通过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,看看基于虚拟化的安全性是否关闭了[doge呵斥]