dhlphm 发表于 2019-1-11 00:34:09

win10pe启动进系统后,x盘为何显示只有3兆?

win10pe启动进系统后,x盘实际有1个多g的文件,为何显示却只有3兆?如图所示:

sunsea 发表于 2019-1-12 10:35:02

本帖最后由 sunsea 于 2019-1-12 10:57 编辑

搞明白这个问题,需要搞明白X盘的工作机制。

X盘他爸,是bootmgr(或者XP系列的setupldr.bin),X盘他妈,是这个东西:


这是微软特制的一个空镜像文件,里面有个3M大小的ntfs分区,然后你的boot.wim什么的被读入内存之后,就会被只读挂载到这个分区(这就是为什么pe会开fbwf保护X盘)

你今天这个,显示的就是你的PE的boot.sdi的原始大小,正常的。

有些人的PEX盘会有几百MB大小,是因为他们用的fbwf版本特殊,可以修改显示的大小为设定的内存缓冲区容量。

或者类似于0PE,他根本没用微软的技术创造这个X盘,它用的是g4d map一个镜像到内存区(至于为啥你没在0PE中看见一个几百M的镜像文件?一个空的几百M的镜像文件压缩后就几百KB),然后再用一些特殊的引导开关指定为x盘。

再补充一点:
具体的X盘的产生技术细节是:
1.bootmgr/setupldr.bin发现你指定了一个wim镜像/CAB镜像(bootmgr用wim,setupldr.bin用CAB(用过老毛桃的会看到一个叫winpe.is_的东西,后面那一个_提示是CAB压缩文件)),将其读入内存
2.bootmgr将boot.sdi读入内存,告诉winload.exe它是启动盘,同时真正的启动数据源是boot.wim(setupldr.bin无此步骤,因为winpe.is_解压是个完整的iso,可以直接当设备用)
3.bootmgr向winload.exe传递bcd中的minint参数(setupldr.bin则是检查一个sif得到这个参数,书写格式类似于boot.ini,具体叫什么名字记不得了)
4.winload.exe/setupldr.bin向内核传递minint参数
5、minint参数指示内核:将注册表整体读入内存,这是为了适应在只读介质中启动的需要(前面不论是boot.wim还是winpe.is_解压得到的winpe.iso都是只读的);忽略 HKLM\System\MountedDevices 中的X盘的挂载信息,将 X 盘符分配给准备好的boot.sdi的分区或者是setupldr.bin已经加载的镜像,当然,在0pe之流的场景下,也可以给内核所在分区分配X盘盘符。。

总结:boot.sdi是借尸还魂里的那个尸,boot.wim是魂。

2012zhd 发表于 2019-1-12 11:42:33

sunsea 发表于 2019-1-12 10:35
搞明白这个问题,需要搞明白X盘的工作机制。

X盘他爸,是bootmgr(或者XP系列的setupldr.bin),X盘他妈 ...

学习了,谢谢科普。

eastmz 发表于 2019-1-12 15:46:14

sunsea 发表于 2019-1-12 10:35
搞明白这个问题,需要搞明白X盘的工作机制。

X盘他爸,是bootmgr(或者XP系列的setupldr.bin),X盘他妈 ...

讲的很详细啊

vaf 发表于 2019-1-12 18:16:28

sunsea 发表于 2019-1-12 10:35
搞明白这个问题,需要搞明白X盘的工作机制。

X盘他爸,是bootmgr(或者XP系列的setupldr.bin),X盘他妈 ...

学习了并收藏, 讲得真好.
页: [1]
查看完整版本: win10pe启动进系统后,x盘为何显示只有3兆?