|
本帖最后由 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是魂。 |
|