无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
查看: 25917|回复: 132

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

    [复制链接]
发表于 2019-5-9 18:47:09 | 显示全部楼层 |阅读模式
本帖最后由 朱玛12345678 于 2019-5-11 18:06 编辑

前言
作为全网研究exFAT启动各版本Windows的第一人,我曾经为研究这个专门写过一个测试帖:http://bbs.wuyou.net/forum.php?m ... 88226&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驱动自然也就无法识别该类型分区。
截图20190110093913.jpg
回到正题这时发现了一个很奇怪的现象就是32位系统在启动阶段加载系统文件和包括exfat.sys在内的驱动时速度很快且不会卡住,而64位系统在启动阶段时加载其他系统文件和驱动也没有问题,但一到加载exfat.sys这个驱动时就会卡住很长一段时间才能加载完成,即使当我通过修改注册表键值的方式让exFAT驱动的加载顺序提前也几乎没有差别。既然不管怎么设置在启动时依然都会卡住一段时间就足以说明64位系统启动慢的原因很明显就是这个驱动的问题。
截图20190504102058.jpg
那么接下来就要着手在这里面继续分析其中的差异,其中在这个地方也曾走过不少弯路。后来在一次思考中偶然想到了64位系统在启动时和32位系统有一个明显的差别就是 微软为了安全起见特别在64位系统中加入了 强制数字签名验证 特性。也就是说32位系统在启动时可以直接加载所需的系统文件,但64位系统在加载系统文件的同时还多了一个要验证文件的数字签名是否有效。
举个简单的例子来表示的话:
32位:winload.exe→ntoskrnl.exe→hal.dll→其他系统文件等;64位:winload.exe→检查数字签名→ntoskrnl.exe→检查数字签名→hal.dll→检查数字签名→其他系统文件等→逐一检查数字签名。其中的规则是 在检查数字签名过程中如果条件为真(签名有效),则通过验证继续加载后面的系统文件;如果条件为假(签名无效),则验证失败拒绝加载并在WBM界面返回0xc0000428无法验证文件数字签名的错误代码提示。
截图20190504104633.jpg
然后我自然就去看了一下发现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}
截图20190504110025.jpg

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

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

评分

参与人数 33无忧币 +170 收起 理由
foolst + 5 很给力!
123456dj + 5 赞一个!
yynq + 10 很给力!
hxd9724 + 5
xujinbiao + 5 很给力!
Zyx2003123 + 5 赞!给力!
lookerJ + 5 先收藏以示敬仰,明天再好好看
rengrancunzai + 5
addaadda + 5 钻研精神值得表扬
xq8751 + 5 赞一个!
palm777qqq + 5
2012andyle113 + 5 神马都是浮云
nbzx + 5 赞一个!
月亮河岸 + 5 神马都是浮云
hnwsdz + 5 很给力!
liuzhaoyzz + 5 很给力!
zts59 + 5 很给力!
hua_wuxin + 5 赞一个!
2012yjgsz + 5 很给力!
tony_lam + 5 赞一个!
2010feicool + 5 收藏了,有空就试试
saiz + 5 很给力!
sghihor + 5 淡定
叮叮咚咚 + 5 赞一个!
netants2011 + 5 很给力!
20090101 + 5 赞一个!
chishingchan + 5 赞一个!
mtx95 + 5 很给力!
cchessbd + 5 很给力!
不知 + 5 很给力!

查看全部评分

 楼主| 发表于 2019-5-9 18:48:06 | 显示全部楼层
研究了这么长时间,总算把最大的问题解决了。。

点评

回复chishingchan:对于所有语言的系统都适用  发表于 2019-5-10 15:08
我喜欢收集各版本系统的多语言的。附件中的文件属于英文并适用于所有语言系统吗?  发表于 2019-5-10 09:57
回复

使用道具 举报

发表于 2019-5-9 19:52:10 | 显示全部楼层
总算有结果了
回复

使用道具 举报

发表于 2019-5-9 20:27:05 来自手机 | 显示全部楼层
这个exFat比起ntfs有什么优点?

点评

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

使用道具 举报

发表于 2019-5-9 20:27:59 来自手机 | 显示全部楼层
佩服佩服,这个推断过程和解决方法都很棒
回复

使用道具 举报

发表于 2019-5-9 20:29:33 来自手机 | 显示全部楼层
不知道那个要追赶windows的开源系统ReactOS是否也支持在exFat安装运行?

点评

这个系统我只听说过但没用过,所以能不能exFAT启动我也就不得而知了。 不过有兴趣的话你可以自行测试  详情 回复 发表于 2019-5-9 20:55
回复

使用道具 举报

发表于 2019-5-9 20:31:03 来自手机 | 显示全部楼层
重大突破,感谢分享。
回复

使用道具 举报

发表于 2019-5-9 20:36:42 | 显示全部楼层
exfat以后会是大趋势吧

点评

FAT32、exFAT这类走的是兼容路线,NTFS、ReFS这类走的是功能路线。 它们各有各的优缺点呈互补关系,不同路线之间都不会被任意一方完全替代。 对于U盘来说会从FAT32逐渐转向exFAT,对于硬盘来说会从NTFS逐渐转向ReF  详情 回复 发表于 2019-5-10 15:28
回复

使用道具 举报

发表于 2019-5-9 20:44:29 | 显示全部楼层
很好的技术贴
回复

使用道具 举报

发表于 2019-5-9 20:47:49 来自手机 | 显示全部楼层
勇于探索,坚持不懈,佩服!
回复

使用道具 举报

 楼主| 发表于 2019-5-9 20:51:55 | 显示全部楼层
sairen139 发表于 2019-5-9 20:27
这个exFat比起ntfs有什么优点?

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

点评

那么,如果是用在在固态硬盘、甚至是M.2接口的NVME协议固态硬盘上,也能起到相应的作用啦?  详情 回复 发表于 2019-10-2 16:30
檔系統原理是這樣沒錯,如果要具體實驗數據,您有建議測試方法?  详情 回复 发表于 2019-5-11 23:14
请问那exFAT在普通硬盘下有好处不?  详情 回复 发表于 2019-5-9 22:16
回复

使用道具 举报

 楼主| 发表于 2019-5-9 20:55:15 | 显示全部楼层
sairen139 发表于 2019-5-9 20:29
不知道那个要追赶windows的开源系统ReactOS是否也支持在exFat安装运行?

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

使用道具 举报

发表于 2019-5-9 21:45:18 | 显示全部楼层
在这个领域,楼主研究的深!佩服你!!
回复

使用道具 举报

发表于 2019-5-9 21:46:04 | 显示全部楼层
牛A,围观达淫...
回复

使用道具 举报

发表于 2019-5-9 21:55:31 | 显示全部楼层
勇于探索,坚持不懈,佩服!
回复

使用道具 举报

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

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

点评

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

使用道具 举报

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

点评

原谅我有好多年没有专门研究过PE系统了,这种情况一般不是缺系统文件就是缺注册表键值。  详情 回复 发表于 2019-5-9 22:35
回复

使用道具 举报

 楼主| 发表于 2019-5-9 22:33:26 | 显示全部楼层
feihe 发表于 2019-5-9 22:16
请问那exFAT在普通硬盘下有好处不?

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

使用道具 举报

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

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

使用道具 举报

发表于 2019-5-10 06:47:59 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

发表于 2019-5-10 08:06:25 | 显示全部楼层
那么是否还存在另一种解决办法,用软件记录启动日志,找到系统首先会查找exfat.sys的cat文件位置,将对应文件复制到该位置,这样是不是变相的加快了系统查找过程,不知道尝试将都应cat文件复制到exfat文件所在目录会不会有用?

点评

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

使用道具 举报

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

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

使用道具 举报

发表于 2019-5-10 08:38:46 | 显示全部楼层
楼主果然够拼的,这个研究竟然搞了这么久,支持下,不容易呀!!!!
回复

使用道具 举报

发表于 2019-5-10 09:51:48 来自手机 | 显示全部楼层
坚持。。。。必须坚持,,,执着的人。。。。
回复

使用道具 举报

发表于 2019-5-10 09:53:07 来自手机 | 显示全部楼层
楼主再研究下,问什么进PE中,会提示数字证书错误,无法进入。。。。

点评

请把问题说具体一点,还有PE我测试过替换驱动并不会报错。  详情 回复 发表于 2019-5-10 12:19
回复

使用道具 举报

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

点评

PE未测试,以后有空再研究。 软件我记得有但我很久没用忘了叫什么名了,你网上搜一下找找看。  详情 回复 发表于 2019-5-10 12:23
回复

使用道具 举报

发表于 2019-5-10 11:53:58 | 显示全部楼层
神人啊  牛
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

发表于 2019-5-10 13:49:35 | 显示全部楼层
win7 7850 这个珍惜版本能不能分享下啊

点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414136&mobile=no  详情 回复 发表于 2019-5-10 14:58
珍稀  详情 回复 发表于 2019-5-10 13:49
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-11-26 23:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表