无忧启动论坛

标题: grub4dos如何修改内存中的BCD文件,以动态启动某分区某目录下的某VHD或WIM文件 [打印本页]

作者: qj_tzy    时间: 2014-2-25 14:28
标题: grub4dos如何修改内存中的BCD文件,以动态启动某分区某目录下的某VHD或WIM文件
本帖最后由 qj_tzy 于 2014-2-25 14:29 编辑

grub4dos如何修改内存中的BCD文件,以动态启动某分区某目录下的某VHD或WIM文件

若将bootmgr、bcd、boot.sdi三个文件拷入\boot\目录下,并将其打包为nt6.img,用grub4dos的map --mem 命令将nt6.img装入内存后,grub4dos的主文件将分区(hdx,y)、目录/dir/、VHD或WIM文件名如sys.wim等参数,传给一grub4dos的批文件,动态修改内存中的BCD文件后,读取nt6.img中的boot.sdi,并启动参数指定的VHD或WIM文件。

我知道chenall等发布的ntboot早已实现此功能,我也经常在用。我现在因需要,要自己手动编这一grub4dos批文件,解开ntboot后又未看明白。

诚请各位网友指点,谢谢!

作者: chenall    时间: 2014-2-25 15:33
NTBOOT的做法如下,供参考

首先在需要指定文件目录的项目随意指定一个足够长的路径。

比如
device                  ramdisk=[boot]\xp03\03.wim

\xp03\03.wim,可以随意设置一个很长的路径,
比如
修改以上的值为 ramdisk=[boot]\RAMDISK_FILE_PATH\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCDA

之后就可以用WINHEX之类的软件打开这个BCD,查找RAMDISK_FILE_PATH字符串,就可以看到这个路径的位置了。记录下来(一般会有好几处)

最终就可以在GRUB4DOS下,使用类似如下的方法写入。。
write --offset=XXXXX path/bcd   \\xp03\\03.wim\0

因为这个路径是UNICODE编码的,写入时需要自己转换一下,英文的转换比较简单,在每个字符后面加上\0就行了。中文的很麻烦,所以NTBOOT也不支持非英文的路径。
作者: qj_tzy    时间: 2014-2-25 15:42
chenall 发表于 2014-2-25 15:33
NTBOOT的做法如下,供参考

首先在需要指定文件目录的项目随意指定一个足够长的路径。

谢谢,我马上动手,不清楚时再向您请教。
作者: qj_tzy    时间: 2014-2-25 17:12
chenall 发表于 2014-2-25 15:33
NTBOOT的做法如下,供参考

首先在需要指定文件目录的项目随意指定一个足够长的路径。

还有一问题:
启动时要读取的boot.sdi文件,已经map --mem /xp03_wim.img (fd0)命令加载到(fd0)中了,但winxp.wim却在(hd0,4)/ramos/目录中,
1.boot.sdi与winxp.wim不在同一分区
2.如何在BCD中指定分区,即要把(hd0,4)转为bcd识别的分区格式,并写入,如何才能做到

谢谢!

作者: chenall    时间: 2014-2-25 17:28
(hd0,4)在bcd中的写法很麻烦的。。

着先是(hd0),通过磁盘签到名确定。。。0X1B8处的4个字节。在BCD里面有对应的信息。。

然后(hd0,4),通过磁盘分区的偏移来确定,,,即这个磁盘的起始位置。。

这些你没有处理好,做好的BCD就只能在你的电脑上使用。。

对于这些的处理在NTBOOT中都有,建议通读一下NTBOOT的批处理源码。一个语句一个语句理解过去,若是只看其中某一部份基本上是看不出为什么要这样做的。。
作者: qj_tzy    时间: 2014-2-25 17:30
chenall 发表于 2014-2-25 17:28
(hd0,4)在bcd中的写法很麻烦的。。

着先是(hd0),通过磁盘签到名确定。。。0X1B8处的4个字节。在BCD里面 ...

好的,谢谢
作者: rbwrbw    时间: 2024-6-17 17:17
缺少视频教程,文字太长,太枯燥
作者: qhb    时间: 2024-11-5 13:23
赞赞




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3