|
本帖最后由 sunsea 于 2021-11-14 16:17 编辑
看以前分析bootmgr/ntldr的行为的帖子,BIOS下bootmgr是用实模式读完启动要件:bcd、SYSTEM、ntoskrnl.exe、必要磁盘驱动等再进保护模式的。boot.wim肯定也算启动要件之一。现在需要排除是:
情况1,bootmgr先从boot.wim里取出相关要件后,进入保护模式,用磁盘驱动读剩下的非要件的东西,比如smss.exe之流。
还是
情况2,bootmgr实模式下完整载入boot.wim到内存,从内存中取出要件(以我个人印象,应该是这个情况,没道理大改,尤其是现在启动盘速度普遍都很快)
目前考虑找一个USB启动速度十分拉垮的属于上古的Native技术应用环境的烂机进行启动测试。如果是情况1,速度应该比情况2快很多。这有理论支持:boot.wim所用格式是不固实的,从其中单独取出文件是非常快的。
如果 WinPE 装了 SVBus 驱动,在转圈的时候加载了这个驱动,这个驱动也会读取 GRUB4DOS 写在低地址的 map 信息。
但是这个驱动图省事,没有读取碎片列表,也不对信息的有效性做检查,因此如果文件不连续,那生成的虚拟盘就会出问题,可能导致死机。
-----------------------------
Windows 本身比较 "霸道",它在启动过程中也经常不去管 E820 内存映射信息,直接去读写低地址的一些区域。
因此如果 GRUB4DOS 写的碎片表被 Windows 污染了,但是 WIM 镜像还没有完全读完,那么读到的 WIM 就会有错误,最终造成蓝屏或死机。
这段解释很好,所以有可能需要对svbus等进行补丁,让g4e把映射插槽、碎片表等写到UEFI环境变量等不受干扰的区域,前640KB实在不太保险。实模式的g4d考虑到目前应用日渐减少,可以不动。或者找个更加保险的地址。但是考虑到g4d是接管int13方式进行map,所以可能也没有太多自由……仅供参考吧?
|
|