朱玛12345678 发表于 2019-5-9 18:47:09

完美解决64位系统在exFAT分区中启动时间过长的问题

本帖最后由 朱玛12345678 于 2019-5-11 18:06 编辑

前言
作为全网研究exFAT启动各版本Windows的第一人,我曾经为研究这个专门写过一个测试帖:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=388226&mobile=no
其中一直以来都困扰着我的一个问题就是 高版本的64位系统在exFAT分区中的启动时间非常长,而导致这个问题的真正原因在很长一段时间内我也一直没能搞清楚,同时也因为这个问题导致我始终无法将其正式应用于日常使用环境。不过在经过我后来的不懈努力之下此问题最后终于得到解决,同时我也打算分享这段奇妙而又未知的探索旅程。

原因
关于exFAT启动的问题在继我上一次的研究到至今已有近半年之久,但我也曾说过日后一定会解决这个问题,所以这几天我本着不将就的原则毅然决定去寻找最终的解决方案,于是这个研究的始末还是要从我前几天的探究和测试说起:
我在当时最初的想法与起点是分别使用同版本的32位和64位系统来测试启动,同时仔细对比并分析其中的差异。

分析
首先我在这里也简单说明一下Windows系统运行在各种不同文件系统上是怎么来控制驱动加载启动的(以BIOS启动为例,UEFI大致相同):
Bootmgr(+内置基本文件系统驱动)→BCD(依靠Bootmgr提供相应的文件系统驱动来加载)→Bootmgr移交文件系统控制权给→Winload.exe(+内置基本文件系统驱动)→ntoskrnl.exe(依靠Winload.exe提供相应的文件系统驱动来加载)→hal.dll(同左)→其他系统核心文件......(+1)→Winload.exe移交文件系统控制权给→系统盘使用的文件系统名.sys(最终加载的完整文件系统驱动)→其他系统文件......(整个系统的加载和运行由系统盘使用的文件系统名.sys管理与控制)→完成启动阶段......
顺便补充一句看到这里应该就能知道Win7SP1及以前版本的系统不支持从exFAT分区中启动的真正原因,因为它的WBM和WLD都没有内置最基本的exFAT驱动自然也就无法识别该类型分区。

回到正题这时发现了一个很奇怪的现象就是32位系统在启动阶段加载系统文件和包括exfat.sys在内的驱动时速度很快且不会卡住,而64位系统在启动阶段时加载其他系统文件和驱动也没有问题,但一到加载exfat.sys这个驱动时就会卡住很长一段时间才能加载完成,即使当我通过修改注册表键值的方式让exFAT驱动的加载顺序提前也几乎没有差别。既然不管怎么设置在启动时依然都会卡住一段时间就足以说明64位系统启动慢的原因很明显就是这个驱动的问题。

那么接下来就要着手在这里面继续分析其中的差异,其中在这个地方也曾走过不少弯路。后来在一次思考中偶然想到了64位系统在启动时和32位系统有一个明显的差别就是 微软为了安全起见特别在64位系统中加入了 强制数字签名验证 特性。也就是说32位系统在启动时可以直接加载所需的系统文件,但64位系统在加载系统文件的同时还多了一个要验证文件的数字签名是否有效。
举个简单的例子来表示的话:
32位:winload.exe→ntoskrnl.exe→hal.dll→其他系统文件等;64位:winload.exe→检查数字签名→ntoskrnl.exe→检查数字签名→hal.dll→检查数字签名→其他系统文件等→逐一检查数字签名。其中的规则是 在检查数字签名过程中如果条件为真(签名有效),则通过验证继续加载后面的系统文件;如果条件为假(签名无效),则验证失败拒绝加载并在WBM界面返回0xc0000428无法验证文件数字签名的错误代码提示。

然后我自然就去看了一下发现exfat.sys本身果然没有数字签名,这更加确定了就是数字签名的问题。后来经确认exfat.sys本身在所有版本的Windows中都没有数字签名,所以要提前说一句这个锅请务必让微软来背。
这时肯定又会有一个奇怪的问题,既然exFAT驱动本身并不包含数字签名,那Windows还能在启动时通过签名验证使其正常加载也不会报错?其实这里就涉及到数字签名的保存方式问题了:
实际上数字签名有两种存储方式,一种是文件数字签名,它将数字证书和文件哈希内置在单个PE类型文件的尾部,这样就可以直接通过查看此文件属性进入数字签名选项卡看到其状态信息;而另一种就是目录数字签名,它将数字证书和文件哈希等信息作为一个外置的.cat安全编录文件给独立出来,并可支持保存多个文件的签名信息,比如.inf驱动程序安装文件就是要通过这种方式来验证数字签名。
这样对于exfat.sys这个文件来说它也是有数字签名的。不同于ntfs.sys使用内置签名,exfat.sys显然使用的是外置签名,而且这样签名的文件在系统里也有不少(如notepad.exe),而这些用于数字签名.cat文件的存放位置在:C:\Windows\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}


思路
分析到这里那么这个问题也就有办法解决了,很明显64位系统在启动过程中加载exFAT驱动慢的罪魁祸首就是数字签名。因为exfat.sys本身没有内置数字签名,所以Windows在启动时要加载它就会改为从整个系统盘中逐个寻找到相应的.cat文件来校验比对,由于Windows的系统文件数量众多,因此搜索文件所用的时间也会相当长,这也就直接导致了从exFAT分区中启动时间长到离谱的真正原因。那么最终的解决方案自然就是自己给这个驱动文件做一个内置的数字签名就解决问题了。
当然这个数字签名用哪家的工具和证书都没有问题,只要签名有效就能通过64位系统的启动验证。


实践
这次分享的exFAT驱动均从原版系统镜像中提取并由我添加内置数字签名可快速通过64位系统签名验证,解压缩包后根据你的系统版本选择对应的驱动文件并直接放到C:\Windows\System32\Drivers文件夹内替换掉原文件再测试启动即可。
文件下载链接
论坛直接下载:

腾讯微云下载:http://share.weiyun.com/5Cw73QR

百度网盘下载:http://pan.baidu.com/s/11DIj4vTvE6lA-Ah7NhZKdQ


当exFAT驱动添加内置数字签名后再测试64位系统的启动时间果然由原来的几个小时缩短为和32位系统一样十几秒就进入了桌面,至此该问题圆满解决!


后记
写到这里我想说的是:
每一个问题在探索与研究的过程中都会有着不一样的发现,也许有时候这可能会很难,但也坚持不放弃寻找其中的奥秘,最后成功冲破迷雾取得终有的收获。

朱玛12345678 发表于 2019-5-9 18:48:06

研究了这么长时间,总算把最大的问题解决了。。

新空气 发表于 2019-5-9 19:52:10

总算有结果了

sairen139 发表于 2019-5-9 20:27:05

这个exFat比起ntfs有什么优点?

sairen139 发表于 2019-5-9 20:27:59

佩服佩服,这个推断过程和解决方法都很棒

sairen139 发表于 2019-5-9 20:29:33

不知道那个要追赶windows的开源系统ReactOS是否也支持在exFat安装运行?

窄口牛 发表于 2019-5-9 20:31:03

重大突破,感谢分享。

2623666 发表于 2019-5-9 20:36:42

exfat以后会是大趋势吧

xyzy1008 发表于 2019-5-9 20:44:29

很好的技术贴

2011yaya2007777 发表于 2019-5-9 20:47:49

勇于探索,坚持不懈,佩服!

朱玛12345678 发表于 2019-5-9 20:51:55

sairen139 发表于 2019-5-9 20:27
这个exFat比起ntfs有什么优点?

简单点来说就是在SSD上用exFAT性能会提高,而且没有日志记录可以延长U盘寿命。

朱玛12345678 发表于 2019-5-9 20:55:15

sairen139 发表于 2019-5-9 20:29
不知道那个要追赶windows的开源系统ReactOS是否也支持在exFat安装运行?

这个系统我只听说过但没用过,所以能不能exFAT启动我也就不得而知了。
不过有兴趣的话你可以自行测试 {:1_186:}

2010LeeKoonKwan 发表于 2019-5-9 21:45:18

在这个领域,楼主研究的深!佩服你!!

邪恶海盗 发表于 2019-5-9 21:46:04

牛A,围观达淫...

sleet 发表于 2019-5-9 21:55:31

勇于探索,坚持不懈,佩服!

feihe 发表于 2019-5-9 22:16:12

朱玛12345678 发表于 2019-5-9 20:51
简单点来说就是在SSD上用exFAT性能会提高,而且没有日志记录可以延长U盘寿命。

请问那exFAT在普通硬盘下有好处不?

foxfirefox 发表于 2019-5-9 22:25:51

楼主研究一下,最新版10PE下微软输入法的候选框怎么出来

朱玛12345678 发表于 2019-5-9 22:33:26

feihe 发表于 2019-5-9 22:16
请问那exFAT在普通硬盘下有好处不?

HDD用的话这个还真没有,不过对于一般人来说有个好处倒是exFAT没有权限管理机制,即就算你用权限最低的User账户登录系统也能有和PE系统一样的System最高权限,也就是说永远不会出现系统盘里有垃圾还没权限删除的情况。

朱玛12345678 发表于 2019-5-9 22:35:57

foxfirefox 发表于 2019-5-9 22:25
楼主研究一下,最新版10PE下微软输入法的候选框怎么出来

原谅我有好多年没有专门研究过PE系统了,这种情况一般不是缺系统文件就是缺注册表键值。

wuyouman01 发表于 2019-5-10 06:47:59

谢谢分享!

nttwqz 发表于 2019-5-10 08:06:25

那么是否还存在另一种解决办法,用软件记录启动日志,找到系统首先会查找exfat.sys的cat文件位置,将对应文件复制到该位置,这样是不是变相的加快了系统查找过程,不知道尝试将都应cat文件复制到exfat文件所在目录会不会有用?

朱玛12345678 发表于 2019-5-10 08:34:17

nttwqz 发表于 2019-5-10 08:06
那么是否还存在另一种解决办法,用软件记录启动日志,找到系统首先会查找exfat.sys的cat文件位置,将对应文 ...

貌似不行,微软似乎把Windows 启动管理器里的相关代码给写死了,它只会从CatRoot文件夹里寻找.cat安全编录文件,如果放在其他位置启动时就找不到自然会视为没有数字签名无法通过验证。

chinaren12 发表于 2019-5-10 08:38:46

楼主果然够拼的,这个研究竟然搞了这么久,支持下,不容易呀!!!!

狼人72105 发表于 2019-5-10 09:51:48

坚持。。。。必须坚持,,,执着的人。。。。

狼人72105 发表于 2019-5-10 09:53:07

楼主再研究下,问什么进PE中,会提示数字证书错误,无法进入。。。。

foxfirefox 发表于 2019-5-10 11:18:12

这个要是引入PE不知道是什么效果?
另外有没有软件直接将ISO文件以exfat格式写入U盘或者移到硬盘

tdqk003 发表于 2019-5-10 11:53:58

神人啊牛

朱玛12345678 发表于 2019-5-10 12:19:47

狼人72105 发表于 2019-5-10 09:53
楼主再研究下,问什么进PE中,会提示数字证书错误,无法进入。。。。

请把问题说具体一点,还有PE我测试过替换驱动并不会报错。

朱玛12345678 发表于 2019-5-10 12:23:46

foxfirefox 发表于 2019-5-10 11:18
这个要是引入PE不知道是什么效果?
另外有没有软件直接将ISO文件以exfat格式写入U盘或者移到硬盘

PE未测试,以后有空再研究。
软件我记得有但我很久没用忘了叫什么名了,你网上搜一下找找看。

qingdao33122 发表于 2019-5-10 13:49:35

win7 7850 这个珍惜版本能不能分享下啊
页: [1] 2 3 4 5 6
查看完整版本: 完美解决64位系统在exFAT分区中启动时间过长的问题