|
楼主 |
发表于 2009-8-28 00:42:47
|
显示全部楼层
`
MENU.GZ 中的菜单内容
此菜单接着 MENU.0PE 继续启动。
看完整个 0PE 专用菜单,才知道,整个菜单只是根据用户不同的选择,将相应的 PE 所需文件包读入 DOS 所在的虚拟磁盘中,然后由 DOS 来处理这些文件,构建 PE 启动所需要的环境。
这个菜单看懂了,接下来的 DOS 批处理文件可没那么容易理解了。
MENU in MENU.GZ
--------------------------------------------------------------------------------
;0PE menu by Pseudo 2009.6.6
; 1、本地优先、解开的优先。有利于减少网络流量和内存占用。
; 根据首次找到的/0PE/BUFXP.GZ(BUF2K3.GZ)确定初始目录。先本地,后PXE服务器(PXE启动时);
; 先找解开的文件,后找/0PE/0PE.ISO,将其仿真为光盘并在其内找。
; 2、初始目录优先(先入为主)。初始目录优先有利于各组件版本一致,并减少搜索代价。
; 找其它文件次序:初始目录,本地盘(含仿真光盘),PXE服务器(PXE启动时)。
; 3、根驱动优先。根驱动一般是为本机定制的驱动。
; 如果存在磁盘驱动/OEM_SRS.ZIP,则不再找其它磁盘驱动,即使选了相应菜单。
; 由于初始目录优先,混合启动时,本地(包括0PE.ISO里)若有BUFXP.GZ(BUF2K3.GZ),则倾向于使用本地文件,缺文件才找PXE服务器上的。
; 本地若无BUFXP.GZ(BUF2K3.GZ),则倾向于使用PXE服务器上的文件,缺文件才从本地找。
; 设置 Debug 状态
read 0x60110 || debug off
; 将 Debug 状态传递到 Dos 启动过程中
read 0x60110 && write --offset=480 (hd7,0)/BAT/_ENV.BAT set DEBUGON=1\r\n
; 根据选择的菜单项,设置启动类别(XP,2003,DOS,用户自定义菜单)
write --offset=50 (hd7,0)/BAT/_ENV.BAT set SYS.VER=XP\r\n
checkrange 5:7 read 0x60068 && write --offset=50 (hd7,0)/BAT/_ENV.BAT set SYS.VER=2003\r\n
checkrange 8 read 0x60068 && write --offset=50 (hd7,0)/BAT/_ENV.BAT set SYS.VER=DOS\r\n
checkrange 4 read 0x60068 && write --offset=150 (hd7,0)/BAT/_ENV.BAT set MENU.USR=1\r\n
; 0x602A0 之前好象都未使用,怎么能在这里做判断呢?传递环境变量到 DOS:set BTM=ISO
read 0x602A0 && write (hd7,0)/BAT/_ENV.BAT set BTM=ISO\r\n
; 如果是 PXE 启动,传递环境变量到 DOS:set BTM=PXE
read 0x60064 && write (hd7,0)/BAT/_ENV.BAT set BTM=PXE\r\n
; 如果是 PXE 启动,则在 DOS 启动时加载 undi_drv.exe
read 0x60064 && write (hd7,0)/config.sys device=bin\\undi_drv.exe\r\n
; 如果是 PXE 启动,则将 PXE 的“客户端IP”,“服务端IP”,“网关IP” 写入 PXE_XIP.COM 中。
; PXE_XIP.COM 可能是 Pseudo 写的一个小程序
read 0x60064 && dd if=(md) of=(hd7,0)/BIN/PXE_XIP.COM bs=1 count=12 skip=0x8284 seek=0x166
; 流程控制变量
write 0x60234 0
default 0
timeout 0
; 隐藏菜单
hiddenmenu
; 菜单 [0] 流程控制
title
; [1] 0x60234 初始值就为 0,所以首先进入菜单 1 执行
checkrange 0 read 0x60234 && fallback 1
; [2]-[3]KERNEL.ZIP 可能返回 3 或者 出错后进入GRUB的命令行
checkrange 1 read 0x60234 && fallback 2
; [4]-[5]OEM_SRS.ZIP 可能返回 4,5,6,7,8
checkrange 3 read 0x60234 && fallback 4
; [6]-[7]SRS1.ZIP 返回 8
checkrange 4 read 0x60234 && fallback 6
; [8]-[9]SRS2.ZIP 返回 8
checkrange 5 read 0x60234 && fallback 8
; [10]-[11]F6.ZIP 可能返回 8,7
checkrange 6 read 0x60234 && fallback 10
; [12]xp/03switch 可能返回 9,10
checkrange 8 read 0x60234 && fallback 12
; [13]-[14]xp-ext1 可能返回 11(需要 xpext2),12(不需要 xpext2)
checkrange 9 read 0x60234 && fallback 13
; [15]-[16]2k3-ext1 可能返回 13(需要 2k3ext2),14(不需要 2k3ext2)
checkrange 10 read 0x60234 && fallback 15
; [17]-[18]xp-EXT2.WIM 可能返回 15(需要 NET.WIM),16(不需要)
checkrange 11 read 0x60234 && fallback 17
; [19]-[20]2k3-EXT2.WIM 可能返回 17(需要 NET.WIM),18(不需要)
checkrange 13 read 0x60234 && fallback 19
; [21]-[22]xp-NET.WIM 可能返回 19(需要 DEF.CAB),20(不需要)
checkrange 15 read 0x60234 && fallback 21
; [23]-[24]2k3-NET.WIM 可能返回 21(需要 DEF.CAB),22(不需要)
checkrange 17 read 0x60234 && fallback 23
; [25]-[26]DEF.CAB 可能返回 23
checkrange 19,21 read 0x60234 && fallback 25
; [27]BOOT
checkrange 7,12,14,16,18,20,22,23 read 0x60234 && fallback 27
fallback Force
; 菜单 [1] 进入 MS-DOS,失败则返回流程控制菜单(然后进入下一个启动项)
title
fallback 0
; 如果用户选择的不是 MS-DOS 启动,则(通过菜单0后)跳转到 菜单2,处理 KERNEL.ZIP
checkrange 8 read 0x60068 || write 0x60234 1
checkrange 8 read 0x60068 || kernel
; 如果是 MS-DOS 启动,则将 (hd7, 0) 映射为软盘(fd0)
map --mem (hd7,0)+1 (fd0)
; 卸载 虚拟软盘 (fd1,fd2,fd3),虚拟设备 0x80 到 0xff。
map --unmap=1,2,3,0x80:0xff
map --rehook
; 设置 root 目录为 (fd0),并设置引导文件
rootnoverify (fd0) && chainloader /io.sys
; 开始启动
; boot
; 菜单 [2] 处理 KERNEL.ZIP,将 KERNEL.ZIP 装入内存 (rd),以便写入到 _KERNEL.ZIP 中
title
; 提示信息 Loading /0PE/KERNEL.ZIP...
pause --wait=0 Loading /0PE/KERNEL.ZIP...
fallback 3
; 找初始目录
; 复位 ErrorFlag
write 0x60000 1
; 恢复初始目录,并设置 root 为根目录
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
; 装载 KERNEL.ZIP 到内存 (rd),(rd) 起始于 16M(0x8000 * 512) 处
map --mem=0x8000 /0PE/KERNEL.ZIP (rd) || write 0x60000 0
; 成功则跳转到 菜单3,继续处理 KERNEL.ZIP,失败则继续查找 KERNEL.ZIP
read 0x60000 && kernel
; 找所有磁盘
; 复位 ErrorFlag
write 0x60000 1
; 搜索所有磁盘的 KERNEL.ZIP 然后装载到内存 (rd)
find --set-root /0PE/KERNEL.ZIP || write 0x60000 0
; 成功则装载 KERNEL.ZIP 到内存 (rd),(rd) 起始于 16M(0x8000 * 512) 处
read 0x60000 && map --mem=0x8000 /0PE/KERNEL.ZIP (rd)
; 成功则跳转到 菜单3,继续处理 KERNEL.ZIP,失败则继续查找 KERNEL.ZIP
read 0x60000 && kernel
; 找 PXE
; 复位 ErrorFlag
write 0x60000 1
; 如果是 PXE 启动,则设置 root 为 PXE 服务器
read 0x60064 && rootnoverify (pd)
; 装载 KERNEL.ZIP 到内存 (rd),(rd) 起始于 16M(0x8000 * 512) 处
map --mem=0x8000 /0PE/KERNEL.ZIP (rd) || write 0x60000 0
; 成功则跳转到 菜单3,继续处理 KERNEL.ZIP
read 0x60000 && kernel
; 失败则进入 GRUB 命令行模式
pause Error: File /0PE/KERNEL.ZIP not found!!! && commandline
; 菜单 [3] 将 KERNEL.ZIP 写入 _KERNEL.ZIP,以便 DOS 处理
title
; 获取 (rd) 的大小并写入 _KERNEL.ZIP 的文件头中(_KERNEL.ZIP 原本为 3M 全0文件)
cat --length=0 (rd)+1 && dd if=(md) of=(hd7,0)/BUF/_KERNEL.ZIP bs=1 count=4 skip=0x8290
; 将 (rd) 的内容写入 _KERNEL.ZIP 的剩余空间中
dd if=(rd)+1 of=(hd7,0)/BUF/_KERNEL.ZIP bs=1 seek=4
; 提示 KERNEL.ZIP 准备完毕
pause --wait=0 KERNEL.ZIP is ready.
; (通过菜单0后)跳转到 菜单4,继续处理 OEM_SRS.ZIP
fallback 0
write 0x60234 3 && kernel
; 菜单 [4] 处理 OEM_SRS.ZIP,将 OEM_SRS.ZIP 装入内存 (rd),以便写入到 _SRS.ZIP 中
title
; 提示信息 Loading /OEM_SRS.ZIP...
pause --wait=0 Loading /OEM_SRS.ZIP...
; 如果选择了与 F6.ZIP 相关的启动项,则载入 1M 大小的 _srs.zip 到 (fd2) 中
checkrange 3,4,7 read 0x60068 && map --mem (hd7,0)/F6.GZ (fd2)
; 如果未选择与 F6.ZIP 相关的启动项,则载入 3M 大小的 _srs.zip 到 (fd2) 中
checkrange 3,4,7 read 0x60068 || map --mem (hd7,0)/A.GZ (fd2)
map --hook
fallback 5
; 找初始目录
; 复位 ErrorFlag
write 0x60000 1
; 恢复初始目录,并设置 root 为根目录
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
; 装载 OEM_SRS.ZIP 到内存 (rd),(rd) 起始于 16M(0x8000 * 512) 处
map --mem=0x8000 /OEM_SRS.ZIP (rd) || write 0x60000 0
; 成功则跳转到 菜单5,继续处理 KERNEL.ZIP,失败则继续查找 OEM_SRS.ZIP
read 0x60000 && kernel
; 找本地磁盘
; 复位 ErrorFlag
write 0x60000 1
; 搜索所有磁盘的 KERNEL.ZIP 然后装载到内存 (rd),忽略软盘和光盘
find --set-root --ignore-floppies --ignore-cd /OEM_SRS.ZIP || write 0x60000 0
; 成功则装载 OEM_SRS.ZIP 到内存 (rd),(rd) 起始于 16M(0x8000 * 512) 处
read 0x60000 && map --mem=0x8000 /OEM_SRS.ZIP (rd)
; 成功则跳转到 菜单5,继续处理 OEM_SRS.ZIP,失败则继续查找 OEM_SRS.ZIP
read 0x60000 && kernel
; 找PXE
; 复位 ErrorFlag
write 0x60000 1
; 如果是 PXE 启动,则设置 root 为 PXE 服务器
read 0x60064 && rootnoverify (pd)
; 装载 OEM_SRS.ZIP 到内存 (rd),(rd) 起始于 16M(0x8000 * 512) 处
map --mem=0x8000 /OEM_SRS.ZIP (rd) || write 0x60000 0
; 成功则跳转到 菜单3,继续处理 OEM_SRS.ZIP
read 0x60000 && kernel
; 失败则提示 OEM_SRS.ZIP not found.
pause --wait=0 OEM_SRS.ZIP not found.
; 如果选择了与 SRS1.ZIP 相关的菜单项目,则(通过菜单0)跳转到 菜单6 处理 SRS1.ZIP
checkrange 1,5 read 0x60068 && write 0x60234 4
; 如果选择了与 SRS2.ZIP 相关的菜单项目,则(通过菜单0)跳转到 菜单8 处理 SRS2.ZIP
checkrange 2,6 read 0x60068 && write 0x60234 5
; 如果选择了与 F6.ZIP 相关的菜单项目,则(通过菜单0)跳转到 菜单10 处理 F6.ZIP
checkrange 3,4,7 read 0x60068 && write 0x60234 6
; 开始跳转
fallback 0 && kernel
; 菜单 [5] 将 OEM_SRS.ZIP 写入 _SRS.ZIP,以便 DOS 处理
title
; 传递环境变量到 DOS:set OEMF6=TRUE
write --offset=450 (hd7,0)/BAT/_ENV.BAT set OEMF6=TRUE\r\n
; 获取 (rd) 的大小并写入 _SRS.ZIP 的文件头中(_SRS.ZIP 原本为 1.4M 全0文件,或 3M 全0文件)
cat --length=0 (rd)+1 && dd if=(md) of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0x8290
; 将 (rd) 的内容写入 _SRS.ZIP 的剩余空间中
dd if=(rd)+1 of=(fd2)/_SRS.ZIP bs=1 seek=4
; 提示 OEM_SRS.ZIP 准备完毕
pause --wait=0 OEM_SRS.ZIP is ready.
; 如果选择的是“用户自定义菜单”,则(通过菜单0)跳转到 菜单27 直接启动
; 否则跳转到 菜单12 根据所选择的不同系统,继续处理 EXT1.GZ
write 0x60234 8
checkrange 4 read 0x60068 && write 0x60234 7
; 开始跳转
fallback 0 && kernel
; 菜单 [6] 处理 SRS1.ZIP,将 SRS1.ZIP 装入内存 (rd),以便写入到 _SRS.ZIP 中
title
; 提示信息 Loading /0PE/SRS/SRS1.ZIP...
pause --wait=0 Loading /0PE/SRS/SRS1.ZIP...
fallback 7
; 找初始目录
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/SRS/SRS1.ZIP (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/SRS/SRS1.ZIP || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/SRS/SRS1.ZIP (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/SRS/SRS1.ZIP (rd) || write 0x60000 0
read 0x60000 && kernel
; 失败则(通过菜单0)跳转到菜单12,根据所选择的不同系统,继续处理 EXT1.GZ
pause --wait=0 SRS1.ZIP not found.
write 0x60234 8
fallback 0 && kernel
; 菜单 [7] 将 SRS1.ZIP 写入 _SRS.ZIP,以便 DOS 处理
title
write --offset=400 (hd7,0)/BAT/_ENV.BAT set scsiImg=TRUE\r\n
; (_SRS.ZIP 原本为 3M 全0文件)
cat --length=0 (rd)+1 && dd if=(md) of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(fd2)/_SRS.ZIP bs=1 seek=4
pause --wait=0 SRS1.ZIP is ready.
; (通过菜单0)跳转到 菜单12 根据所选择的不同系统,继续处理 EXT1.GZ
write 0x60234 8
fallback 0 && kernel
; 菜单 [8] 处理 SRS2.ZIP,将 SRS2.ZIP 装入内存 (rd),以便写入到 _SRS.ZIP 中
title
pause --wait=0 Loading /0PE/SRS/SRS2.ZIP...
fallback 9
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/SRS/SRS2.ZIP (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/SRS/SRS2.ZIP || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/SRS/SRS2.ZIP (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/SRS/SRS2.ZIP (rd) || write 0x60000 0
read 0x60000 && kernel
; 失败则(通过菜单0)跳转到菜单12,根据所选择的不同系统,继续处理 EXT1.GZ
pause --wait=0 SRS2.ZIP not found.
write 0x60234 8
fallback 0 && kernel
; 菜单 [9] 将 SRS2.ZIP 写入 _SRS.ZIP,以便 DOS 处理
title
write --offset=400 (hd7,0)/BAT/_ENV.BAT set scsiImg=TRUE\r\n
; (_SRS.ZIP 原本为 3M 全0文件)
cat --length=0 (rd)+1 && dd if=(md) of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(fd2)/_SRS.ZIP bs=1 seek=4
; (通过菜单0)跳转到 菜单12 根据所选择的不同系统,继续处理 EXT1.GZ
pause --wait=0 SRS2.ZIP is ready.
write 0x60234 8
fallback 0 && kernel
; 菜单 [10] 处理 F6.ZIP,将 F6.ZIP 装入内存 (rd),以便写入到 _SRS.ZIP 中
title
pause --wait=0 Loading /0PE/SRS/F6.ZIP...
fallback 11
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/SRS/F6.ZIP (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/SRS/F6.ZIP || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/SRS/F6.ZIP (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/SRS/F6.ZIP (rd) || write 0x60000 0
read 0x60000 && kernel
; 如果选择的是“用户自定义菜单”,则(通过菜单0)跳转到 菜单27 直接启动
; 否则跳转到 菜单12 根据所选择的不同系统,继续处理 EXT1.GZ
pause --wait=0 F6.ZIP not found.
write 0x60234 8
checkrange 4 read 0x60068 && write 0x60234 7
fallback 0 && kernel
; 菜单 [11] 将 F6.ZIP 写入 _SRS.ZIP,以便 DOS 处理
title
write --offset=450 (hd7,0)/BAT/_ENV.BAT set OEMF6=TRUE\r\n
; (_SRS.ZIP 原本为 1.4M 全0文件)
cat --length=0 (rd)+1 && dd if=(md) of=(fd2)/_SRS.ZIP bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(fd2)/_SRS.ZIP bs=1 seek=4
; 如果选择的是“用户自定义菜单”,则(通过菜单0)跳转到 菜单27 直接启动
; 否则跳转到 菜单12 根据所选择的不同系统,继续处理 EXT1.GZ
pause --wait=0 F6.ZIP is ready.
write 0x60234 8
checkrange 4 read 0x60068 && write 0x60234 7
fallback 0 && kernel
; 菜单 [12] 根据所选择的不同系统(XP/03),处理不同的 EXT1.GZ
title
write 0x60234 9
read 0x60300 && write 0x60234 10
fallback 0 && kernel
; 菜单 [13] 处理 XP 的 EXT1.GZ,将 XP 的 EXT1.GZ 装入内存 (rd),以便快速释放到虚拟软盘 (fd3)
title
pause --wait=0 Loading /0PE/XP/EXT1.GZ...
; 不自动解压 gzip 文件,将 EXT1.GZ 整个装入内存 (rd)
write 0x82A4 1
fallback 14
; 找初始目录
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/XP/EXT1.GZ (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/XP/EXT1.GZ || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/XP/EXT1.GZ (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/XP/EXT1.GZ (rd) || write 0x60000 0
read 0x60000 && kernel
; 失败则将 B.GZ 虚拟为 (fd3),B.GZ 为 3M 空磁盘映像
pause --wait=0 EXT1.GZ not found.
write 0x82A4 0
map --mem (hd7,0)/B.GZ (fd3)
map --hook
; 如果是 PXE 启动,或 ISO 启动,则继续处理 EXT2.WIM,否则直接启动
write 0x60234 12
read 0x60064 && write 0x60234 11
read 0x602A0 && write 0x60234 11
fallback 0 && kernel
; 菜单 [14] 将 EXT1.GZ 释放到虚拟软盘 (fd3)
title
write --offset=300 (hd7,0)/BAT/_ENV.BAT set EXT1=TRUE\r\n
write 0x82A4 0
map --mem (rd)+1 (fd3) && map --hook
pause --wait=0 EXT1.GZ is ready.
; 如果是 PXE 启动,或 ISO 启动,则继续处理 EXT2.WIM,否则直接启动
write 0x60234 12
read 0x60064 && write 0x60234 11
read 0x602A0 && write 0x60234 11
fallback 0 && kernel
; 菜单 [15] 处理 2003 的 EXT1.GZ,将 2003 的 EXT1.GZ 装入内存 (rd),以便快速释放到虚拟软盘 (fd3)
title
pause --wait=0 Loading /0PE/2003/EXT1.GZ...
write 0x82A4 1
fallback 16
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/2003/EXT1.GZ (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/2003/EXT1.GZ || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/2003/EXT1.GZ (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/2003/EXT1.GZ (rd) || write 0x60000 0
read 0x60000 && kernel
; 失败则将 B.GZ 虚拟为 (fd3),B.GZ 为 3M 空磁盘映像
pause --wait=0 EXT1.GZ not found.
write 0x82A4 0
map --mem (hd7,0)/B.GZ (fd3)
map --hook
; 如果是 PXE 启动,或 ISO 启动,则继续处理 EXT2.WIM,否则直接启动
write 0x60234 14
read 0x60064 && write 0x60234 13
read 0x602A0 && write 0x60234 13
fallback 0 && kernel
; 菜单 [16] 将 EXT1.GZ 释放到虚拟软盘 (fd3)
title
write --offset=300 (hd7,0)/BAT/_ENV.BAT set EXT1=TRUE\r\n
write 0x82A4 0
map --mem (rd)+1 (fd3) && map --hook
; 如果是 PXE 启动,或 ISO 启动,则继续处理 EXT2.WIM,否则直接启动
pause --wait=0 EXT1.GZ is ready.
write 0x60234 14
read 0x60064 && write 0x60234 13
read 0x602A0 && write 0x60234 13
fallback 0 && kernel
; 菜单 [17] 处理 XP 的 EXT2.WIM,将 XP 的 EXT2.WIM 装入内存 (rd),以便写入到 _EXT2.WIM 中
title
pause --wait=0 Loading /0PE/XP/EXT2.WIM...
fallback 18
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/XP/EXT2.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/XP/EXT2.WIM || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/XP/EXT2.WIM (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/XP/EXT2.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 如果是 PXE 启动,或 ISO 启动,则继续处理 @0#NET_.WIM,否则直接启动
pause --wait=0 EXT2.WIM not found.
write 0x60234 16
read 0x60064 && write 0x60234 15
read 0x602A0 && write 0x60234 15
fallback 0 && kernel
; 菜单 [18] 将 XP 的 EXT2.WIM 写入 _EXT2.WIM,以便 DOS 处理
title
cat --length=0 (rd)+1 && dd if=(md) of=(hd7,0)/BUF/_EXT2.WIM bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(hd7,0)/BUF/_EXT2.WIM bs=1 seek=4
pause --wait=0 EXT2.WIM is ready.
write 0x60234 16
read 0x60064 && write 0x60234 15
read 0x602A0 && write 0x60234 15
fallback 0 && kernel
; 菜单 [19] 处理 2003 的 EXT2.WIM,将 2003 的 EXT2.WIM 装入内存 (rd),以便写入到 _EXT2.WIM 中
title
pause --wait=0 Loading /0PE/2003/EXT2.WIM...
fallback 20
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/2003/EXT2.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/2003/EXT2.WIM || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/2003/EXT2.WIM (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/2003/EXT2.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 如果是 PXE 启动,或 ISO 启动,则继续处理 @0#NET_.WIM,否则直接启动
pause --wait=0 EXT2.WIM not found.
write 0x60234 18
read 0x60064 && write 0x60234 17
read 0x602A0 && write 0x60234 17
fallback 0 && kernel
; 菜单 [20] 将 2003 的 EXT2.WIM 写入 _EXT2.WIM,以便 DOS 处理
title
cat --length=0 (rd)+1 && dd if=(md) of=(hd7,0)/BUF/_EXT2.WIM bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(hd7,0)/BUF/_EXT2.WIM bs=1 seek=4
; 如果是 PXE 启动,或 ISO 启动,则继续处理 @0#NET_.WIM,否则直接启动
pause --wait=0 EXT2.WIM is ready.
write 0x60234 18
read 0x60064 && write 0x60234 17
read 0x602A0 && write 0x60234 17
fallback 0 && kernel
; 菜单 [21] 处理 @0#NET_.WIM,将 @0#NET_.WIM 装入内存 (rd),以便写入到 _NET.WIM 中
title
pause --wait=0 Loading /0PE/AUTORUNS/@0#NET_.WIM...
fallback 22
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/AUTORUNS/@0#NET_.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/AUTORUNS/@0#NET_.WIM || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/AUTORUNS/@0#NET_.WIM (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/AUTORUNS/@0#NET_.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 如果是 PXE 启动,则继续处理 DEF.CAB,否则直接启动
pause --wait=0 @0#NET_.WIM not found.
write 0x60234 20
read 0x60064 && write 0x60234 19
fallback 0 && kernel
; 菜单 [22] 将 @0#NET_.WIM 写入 _NET.WIM,以便 DOS 处理
title
cat --length=0 (rd)+1 && dd if=(md) of=(hd7,0)/BUF/_NET.WIM bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(hd7,0)/BUF/_NET.WIM bs=1 seek=4
; 如果是 PXE 启动,则继续处理 DEF.CAB,否则直接启动
pause --wait=0 @0#NET_.WIM is ready.
write 0x60234 20
read 0x60064 && write 0x60234 19
fallback 0 && kernel
; 菜单 [23] 内容和 菜单21 一样,可共用
title
pause --wait=0 Loading /0PE/AUTORUNS/@0#NET_.WIM...
fallback 24
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/AUTORUNS/@0#NET_.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/AUTORUNS/@0#NET_.WIM || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/AUTORUNS/@0#NET_.WIM (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/AUTORUNS/@0#NET_.WIM (rd) || write 0x60000 0
read 0x60000 && kernel
pause --wait=0 @0#NET_.WIM not found.
write 0x60234 22
read 0x60064 && write 0x60234 21
fallback 0 && kernel
; 菜单 [24] 内容和 菜单22 一样,可共用
title
cat --length=0 (rd)+1 && dd if=(md) of=(hd7,0)/BUF/_NET.WIM bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(hd7,0)/BUF/_NET.WIM bs=1 seek=4
pause --wait=0 @0#NET_.WIM is ready.
write 0x60234 22
read 0x60064 && write 0x60234 21
fallback 0 && kernel
; 菜单 [25] 处理 DEF.CAB,将 DEF.CAB 装入内存 (rd),以便写入到 _DEF.CAB 中
title
pause --wait=0 Loading /0PE/NET/*...
fallback 26
; 初始目录有
write 0x60000 1
dd if=(md) of=(md) bs=1 count=8 skip=0x60130 seek=0x829c && root ()
map --mem=0x8000 /0PE/NET/DEF.CAB (rd) || write 0x60000 0
read 0x60000 && kernel
; 找本地
write 0x60000 1
find --set-root /0PE/NET/DEF.CAB || write 0x60000 0
read 0x60000 && map --mem=0x8000 /0PE/NET/DEF.CAB (rd)
read 0x60000 && kernel
; 找PXE
write 0x60000 1
read 0x60064 && rootnoverify (pd)
map --mem=0x8000 /0PE/NET/DEF.CAB (rd) || write 0x60000 0
read 0x60000 && kernel
; 失败则直接启动
pause --wait=0 DEF.CAB not found.
write 0x60234 23
fallback 0 && kernel
; 菜单 [26] Loading /0PE/NET/*...
title
cat --length=0 (rd)+1 && dd if=(md) of=(hd7,0)/BUF/_DEF.CAB bs=1 count=4 skip=0x8290
dd if=(rd)+1 of=(hd7,0)/BUF/_DEF.CAB bs=1 seek=4
pause --wait=0 DEF.CAB is ready.
; 将 NETID.TXT 的内容写入 _NETID.TXT
write 0x60000 1
map --mem=0x8000 /0PE/NET/NETID.TXT (rd) || write 0x60000 0
read 0x60000 && cat --length=0 (rd)+1
read 0x60000 && dd if=(md) of=(hd7,0)/BUF/_NETID.TXT bs=1 count=4 skip=0x8290
read 0x60000 && dd if=(rd)+1 of=(hd7,0)/BUF/_NETID.TXT bs=1 seek=4
read 0x60000 && pause --wait=0 NETID.TXT is ready.
read 0x60000 || pause --wait=0 NETID.TXT not found.
; 将 NETMAP.TXT 的内容写入 _NETMAP.TXT
write 0x60000 1
map --mem=0x8000 /0PE/NET/NETMAP.TXT (rd) || write 0x60000 0
read 0x60000 && cat --length=0 (rd)+1
read 0x60000 && dd if=(md) of=(hd7,0)/BUF/_NETMAP.TXT bs=1 count=4 skip=0x8290
read 0x60000 && dd if=(rd)+1 of=(hd7,0)/BUF/_NETMAP.TXT bs=1 seek=4
read 0x60000 && pause --wait=0 NETMAP.TXT is ready.
read 0x60000 || pause --wait=0 NETMAP.TXT not found.
; 开始启动
write 0x60234 23
fallback 0 && kernel
; 菜单 [27] 启动
title
; 转 (fd2) 为 (fd0)
; 此时 (fd0) 中存放的是 SRS 文件
map --mem (fd2)+1 (fd0)
; 如果选择了“用户自定义菜单”,则转 (fd3) 为 (fd1)
; 此时 (fd1) 中存放的是 EXT1.GZ 中的内容
checkrange 4 read 0x60068 || map --mem (fd3)+1 (fd1)
; 如果未选择“用户自定义菜单”,则设置 (fd1) 为 B.GZ 的内容
; 此时 (fd1) 为 3M 大小的空软盘映像
checkrange 4 read 0x60068 && map --mem (hd7,0)/B.GZ (fd1)
; 卸载 (fd2), (fd3), (0xA0)到(0xff)
map --unmap=2,3,0xA0:0xff
map --rehook
; 调整硬盘顺序,(hd7) 优先
errorcheck off
map (hd7) (hd0)
map (hd2) (hd3)
map (hd1) (hd2)
map (hd0) (hd1)
map --hook
errorcheck on
; 进入 DOS 环境,处理文件
rootnoverify (hd0,0) && chainloader /io.sys
; 开始启动
; boot
--------------------------------------------------------------------------------
[ 本帖最后由 stevenldj 于 2009-9-2 16:10 编辑 ] |
|