幫助中心

        當前位置:首頁 > 幫助中心 > 0PE 菜單分析(2)

        0PE 菜單分析(2)

        日期:2011-06-14 | 時間:23:51
         

        MENU.GZ 中的菜單內容 
         
          此菜單接著 MENU.0PE 繼續啟動。

            看完整個 0PE 專用菜單,才知道,整個菜單只是根據用戶不同的選擇,將相應的 WinPE 所需文件包讀入 DOS 所在的虛擬磁盤中,然后由 DOS 來處理這些文件,構建 WinPE 啟動所需要的環境。

         

        ;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

        大白菜官網

        (責任編輯:m.hushhushevents.com)

        大白菜超級U盤啟動盤制作工具

        主站蜘蛛池模板: eeuss鲁片一区二区三区| 亚洲制服丝袜一区二区三区| 在线视频一区二区三区四区| 激情无码亚洲一区二区三区 | 亚洲天堂一区二区三区| 精品无人区一区二区三区在线| 国产一区二区电影在线观看| 亚洲欧洲∨国产一区二区三区| 亚洲狠狠久久综合一区77777 | 精品欧洲AV无码一区二区男男| 成人精品一区二区不卡视频| 亚洲片一区二区三区| 久久国产视频一区| 国产乱码精品一区二区三区| 日韩AV在线不卡一区二区三区| 亚洲综合国产一区二区三区| 国产福利91精品一区二区三区| 国产三级一区二区三区| 中文字幕乱码一区二区免费 | 人妻夜夜爽天天爽一区| 中文字幕在线观看一区二区三区| 亚洲日本一区二区| 日本一区二区三区在线看 | 国产在线观看一区二区三区精品 | 日韩免费一区二区三区在线| 日韩精品无码人妻一区二区三区| 亚洲av无码一区二区三区不卡| 在线日韩麻豆一区| 一区二区三区日韩精品| 波多野结衣一区二区三区高清在线 | 精品无人区一区二区三区在线| 精品成人一区二区三区免费视频| 日本欧洲视频一区| 免费一区二区三区四区五区| 69福利视频一区二区| 中文字幕一区二区在线播放| 香蕉久久ac一区二区三区| 无码人妻精品一区二区| 亚洲国产高清在线一区二区三区| 亚洲乱码一区二区三区国产精品| 熟妇人妻一区二区三区四区|