无忧启动论坛

标题: g4d启动win7pe神奇的事情 [打印本页]

作者: hotdll    时间: 2012-6-2 23:59
标题: g4d启动win7pe神奇的事情
如下菜单解决:

  1. timeout 15
  2. default 0
  3. color 0x1100408011ffffff 0x1100a00011ffff00 0x110000801100ff00 0x110000001100ff00
  4. font (ud)/BOOT/GRUB/UNIFONT.HEX
  5. graphicsmode -1 640 480 24:32
  6. splashimage (ud)/BOOT/GRUB/BG.LZMA
  7. terminal --font-spacing=0:6
  8. iftitle [checkrange 0x23 read 0x8280]  1. 启动 Native WIN7PE 网络版
  9. map --mem (ud)/ISO/B.GZ (hd)
  10. calc *0x82b9&0xff/2 && map (ud)/ISO/win7boot.iso (0xff) ! map --mem (ud)/ISO/win7boot.iso (0xff)
  11. map (ud)/ISO/win7two.iso (0xfe)
  12. map --hook
  13. chainloader (0xff)/bootmgr
  14. boot
  15. iftitle [checkrange 0x0,0x80 read 0x8280]  1. 启动 Native WIN7PE 网络版
  16. map --mem (ud)/ISO/B.GZ (hd)
  17. checkrange 0x80 read 0x8280 && map /ISO/win7boot.iso (0xff) ! map --mem /ISO/win7boot.iso (0xff)
  18. map /ISO/win7two.iso (0xfe)
  19. map --hook
  20. chainloader (0xff)/bootmgr
  21. boot
  22. title  2. 启动 GHOST 恢复系统镜像  \n 全自动仅支持GHO文件存放在U盘上 \n 存放在硬盘上的请手动!
  23. calc *0x82b9&0xff || uuid (fd0,0) | echo -n | echo -n | echo -n | echo -n | set id=
  24. calc *0x82b9&0xff && uuid (hd0,0) | echo -n | echo -n | echo -n | echo -n | set id=
  25. if not "-"=="%id:~4,1%" set id=0000-0000
  26. map --mem (ud)/IMGS/UGHOST.GZ (fd0)
  27. map --rehook
  28. cat --locate=0000-0000 --number=2 (fd0)/findud.bat > nul
  29. write --offset=%?% (fd0)/findud.bat %id%
  30. chainloader (fd0)+1
  31. rootnoverify (fd0)
  32. title  3. 启动 DiskGenius 图形分区工具 \n 分区利器,F6一键分区功能非常适合新手使用!
  33. map --mem (ud)/IMGS/DISKGEN.GZ (fd0)
  34. map --rehook
  35. chainloader (fd0)+1
  36. rootnoverify (fd0)
  37. title  4. 启动 Acronis Disk Director Suite \n 无损分区利器,某些品牌机分区必备工具!非常好用!
  38. map --mem (ud)/IMGS/ADDS.GZ (fd0)
  39. map --rehook
  40. chainloader (fd0)+1
  41. rootnoverify (fd0)
  42. title  5. 启动 Windows 系统登陆密码破解器 \n登录密码破解利器,已经用它修理不少机器了!
  43. map --mem (ud)/IMGS/PASSWORD.GZ (fd0)
  44. map --rehook
  45. chainloader (fd0)+1
  46. rootnoverify (fd0)
  47. title  6. 启动 Windows 操作系统
  48. find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
  49. map (hd0) ()
  50. map () (hd0)
  51. map --rehook
  52. find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
  53. chainloader /ntldr || chainloader /bootmgr

复制代码



菜单如下:
  1. title 1. 启动 Native WIN7PE 网络版
  2. map --mem (ud)/ISO/win7boot.iso (0xff)
  3. map (ud)/ISO/win7two.iso (0xfe)
  4. map --hook
  5. map --mem (0xfe)/B.gz (hd)
  6. map --hook
  7. chainloader (0xff)/bootmgr
  8. boot
复制代码
说明:
1、win7boot.iso 是win7pe的一级内核。由bootmgr启动boot.wim
2、b.gz是一个1.44M的IMG空的映像文件。
3、异常情况是发生在usb启动后被识别为fd0
异常情况如下:


一些调试:
1、发生上图问题的时候去掉
map --mem (0xfe)/B.gz (hd)
map --hook
两句代码后正常。
2、(hd) 换成(hd8) 结果一样。
3、如果usb启动后识别为hd0,则不会发生上图的情况。
4、测试的GRLDR 0522 --0.4.5c

[ 本帖最后由 hotdll 于 2012-6-3 18:47 编辑 ]
作者: 不点    时间: 2012-6-3 07:09
比较奇怪,搞不懂。

有一个疑问:既然 B.gz 是标准 1.44M 软盘,为何把它仿真为硬盘?可以试试把它仿真为软盘 (fd1):

map --mem (0xfe)/B.gz (fd1)

但还有一个问题需要注意:有些恶意的 BIOS 会在访问软盘时死机。也就是说,上述 map 到 (fd1) 是有可能死机的。

还有一个比较明显的疑问是,当 U盘被识别为 hd0 时,真实的本地硬盘变成了 hd1,此时,如果不使用 map 来交换 (hd0) 和 (hd1),则无法启动 XP。难道 Win7 可以从 hd1 直接启动,即,无须事先把本地硬盘变成 hd0 ?

-------------

现在试图来猜测一下,为何当 U 盘识别为 fd0 时,Win7 启动失败了。

以前经常发现,当 U 盘被 BIOS 识别为 fd0 时,这个 BIOS 通常也不支持以 LBA 模式访问 U 盘,只能用 CHS 模式。这就很糟糕了。因为 CHS 模式最大也只能访问 8G 的数据。如果一个文件有一部分落在 8G 以外,那么它就无法被完整加载,那么进入 Win7 的启动流程以后死机,则是毫不奇怪的了。

更有一些糟糕的 BIOS,它的 CHS 识别得很小,这使得软盘的空间更小,即,比 8G 还小(最小甚至可以达到 1.44M 或者 720K)。这样,问题就更多了。

-----------------------------------

你自己先摸索,我还真猜不透,感觉很蹊跷。
作者: zhs509    时间: 2012-6-3 07:31
标题: 回复 #2 不点 的帖子
楼主仿真为HD是为了只读挂载WIM文件。。。

win7pe好像不识别仿真的fd
作者: 527104427    时间: 2012-6-3 07:46
饭大好认真啊,连吃饭都不离开电脑,佩服!!!!!!!
作者: zhaohj    时间: 2012-6-3 09:22
那问题可能出在b.gz是一个软盘镜像,改成硬盘镜像呢?
作者: freesoft00    时间: 2012-6-3 09:58
好大的碗呀,不知道是什么内容。
作者: hotdll    时间: 2012-6-3 10:18
标题: 回复 #2 不点 的帖子
1、启动的是win7pe,不是win7系统
2、仿真为hd目的是为了挂载wim,不知道为什么,仿真为fd0或者fd1的时候,win7pe磁盘管理器不能识别该虚拟磁盘。
作者: 不点    时间: 2012-6-3 10:33
目的是挂载 wim


可你的 虚拟 hd 是空的呀,这是你自己说的,即,b.gz 是空的。

我感觉你用不上它。想象一下,一个 1.44M 的硬盘,是不是太小了?太小了就有可能失去作用。

由于 b.gz 已经在 (0xfe) 这个虚拟光盘上了,因此,只要 (0xfe) 能访问(即,它存在),就总是可以找到 b.gz,也因此,没必要再次创建一个虚拟盘 (hd)。
作者: hotdll    时间: 2012-6-3 10:43
原帖由 不点 于 2012-6-3 10:33 发表


可你的 虚拟 hd 是空的呀,这是你自己说的,即,b.gz 是空的。

我感觉你用不上它。想象一下,一个 1.44M 的硬盘,是不是太小了?太小了就有可能失去作用。

由于 b.gz 已经在 (0xfe) 这个虚拟光盘上了 ...

用1.44M的硬盘,目的是为了节省内存。

另外用VISTA的WIMFLTR.SYS驱动挂载wim不占用磁盘空间,所以我才创建1.44M的虚拟硬盘。
但是win7pe 下wimfltr.sys 挂载wim,好像必须是win7pe的磁盘管理器能识别的仿真硬盘,也就是scsi 虚拟内存盘。

如果用wimmount.sys驱动挂载,则必须创建几十M甚至几百M的虚拟盘才能挂载。内存小于512M的机器,几乎失去了意义。
作者: 不点    时间: 2012-6-3 11:10
看来要理解你的步骤,还不是很容易的。我也不打算让你一步一步告诉我,这个空的虚拟硬盘将来是如何被使用的,以及它是在什么时候被填充数据的。

因为那会浪费你很多时间。

我也不能帮什么大忙,差不多也就说这么多吧。

不影响你们继续探讨。
作者: hotdll    时间: 2012-6-3 11:17
标题: 回复 #10 不点 的帖子
很简单。
1、win7pe下没有合适的软件创建一个 [red]磁盘管理器[/red]能识别的虚拟内存盘。所以借用g4d创建一个。

2、启动步骤:g4d仿真 win7pe的iso到0xff,chainloader (0xff)/bootmgr,boogmgr在所在根目录寻找boot 文件件下的boot.sdi和bcd,boot.sdi仿真到内存中创建一个虚拟内存盘,然后挂载wim到该内存盘中。然后启动该内存盘\windows\system32\boot\winload.exe 加载内核。

3、我就是在这些步骤之前,用g4d多仿真了一个hd, 在U盘启动的时候,如果U盘被识别为硬盘,则什么问题都没有,当U盘识别为软驱的时候。。。。就会出现找不到\windows\system32\boot\load.exe ,换句话说,找不到win7pe的挂载目录。
作者: 不点    时间: 2012-6-3 11:30
我还是没明白,抱歉。我对于 Windows 的启动流程,并不了解。

我不明白的是,你上述第三步“多仿真了一个 hd”,这有什么作用。就是说,怎么与前面两个步骤中的内容挂钩。

另外还想提醒你一点的是,你这里不纯粹是失败,还有成功的时候。那么,你应该研究成功与失败的差别。从差别中可以找到其秘密。

比如,U 盘识别为软盘时失败了。那么可以猜测,这个软盘不该存在。设法把这个软盘隐藏掉,或者把这个软盘仿真为硬盘。

这不一定真的成功,但这却是一个思路。思路的本质是:找差别。即,通过试验,寻找成功与失败的差别。
作者: hotdll    时间: 2012-6-3 11:34
原帖由 不点 于 2012-6-3 11:30 发表
我还是没明白,抱歉。我对于 Windows 的启动流程,并不了解。

我不明白的是,你上述第三步“多仿真了一个 hd”,这有什么作用。就是说,怎么与前面两个步骤中的内容挂钩。

另外还想提醒你一点的是,你这里 ...


我试过讲fd0变成hd0,然后设置软驱数量为0

但是启动结过依旧。。。。

多仿真了一个Hd的目的是给win7pe用的、。
作者: 不点    时间: 2012-6-3 11:38
你恐怕整的不对吧。

当你把软盘仿真为 hd0 时,你的硬盘怎么办?不存在了?

此时你似乎应该把硬盘仿真为 hd1,才等价于 U 盘识别为 hd0 的情况。
作者: hotdll    时间: 2012-6-3 11:40
原帖由 不点 于 2012-6-3 11:38 发表
你恐怕整的不对吧。

当你把软盘仿真为 hd0 时,你的硬盘怎么办?不存在了?

此时你似乎应该把硬盘仿真为 hd1,才等价于 U 盘识别为 hd0 的情况。


事实上我就是把fd0仿真为hd0,hd0 --> hd1,以此类推。等同F6IMG中处理zip的步骤。
作者: 不点    时间: 2012-6-3 11:50
那等于说,这个差别没找到。换个思路继续找差别吧。最终得找到毛病究竟在哪里,才成功。

嗯—— 这个 fd0 的软驱个数弄成 0,或许还不足以禁止软盘。你可以试试用一条附加的命令 map --disable-chs-mode --disable-lba-mode (fd0) (fd0),这样,这个软盘就彻底不存在了。

另外,你还可以试试把某个空的软盘 img 仿真为 fd0,让这个 fd0 存在,这样在实模式 BIOS 阶段不会导致不确定问题出现。

还有,需要注意仿真嵌套的问题。

不要有很多层的仿真。比如,你现在做好了仿真,但进入某个 IMG 以后,它又做了另外一层仿真,这样的话,你就得确定,到底 Windows 启动的时候,那时的 map --status 是怎样的?如果其中有 memdisk 的仿真在里面,这就更复杂了。

[ 本帖最后由 不点 于 2012-6-3 11:55 编辑 ]
作者: hotdll    时间: 2012-6-3 12:59
标题: 回复 #16 不点 的帖子
我试试。谢谢不点大大




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