无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: qj_tzy
打印 上一主题 下一主题

[已解决] legacy+grub4dos+ntboot引导win7.vhd失败{添加bios+g4d引导vhd的多个写法}

  [复制链接]
121#
发表于 昨天 16:54 | 只看该作者
通过查看帮助信息确认,我上传的NTBOOT-2018-06-22版本,作者是:chenall/527104427   2014-08-24

我保存的另一个NTBOOT-2014-08-24版本,作者是:chenall   2014-08-24

点评

很可能别人修改过,但没有修改相关作者信息。  详情 回复 发表于 昨天 17:28
回复

使用道具 举报

122#
发表于 昨天 17:28 | 只看该作者
本帖最后由 mygamexxx 于 2025-12-7 17:56 编辑
2011yaya2007777 发表于 2025-12-7 16:54
通过查看帮助信息确认,我上传的NTBOOT-2018-06-22版本,作者是:chenall/527104427   2014-08-24

我保 ...

很可能别人修改过,但没有修改相关作者信息。ntboot.iso好像有不同版本如下图:

ScreenShot_2025-12-07_175211_044.png (84.92 KB, 下载次数: 7)

ScreenShot_2025-12-07_175211_044.png
回复

使用道具 举报

123#
发表于 昨天 17:58 | 只看该作者
本帖最后由 mygamexxx 于 2025-12-7 18:39 编辑

使用ntboot.iso是否是因为ISO中自带的旧版本grldr,所以没问题?单文件的NTBOOT外部命令是否利用新版本的grldr,所以出错?

在G4E的RUN帖子上我建议YAYA大收编一下G4D的NTBOOT和RUN外部命令,纳入G4D的正式外部命令,YAYA大感觉没必要。

ScreenShot_2025-12-07_183834_724.png (61.86 KB, 下载次数: 0)

ScreenShot_2025-12-07_183834_724.png
回复

使用道具 举报

124#
发表于 昨天 18:48 来自手机 | 只看该作者
我这里测试,NTBOOT单文件或者iso版本,都正常启动到windows图标。iso版本映射为光盘,然后 (0xff)/ntnoot  /win.vhd ,此时不会使用内部的grldr。

点评

请看128楼的测试结果,即新版grldr+ntboot(527104427的2018版,4294kb)不能引导win7的vhd,但能正常引导win8/10/11的vhdx。 有必要对该版本ntboot作适当的修改吗?  详情 回复 发表于 昨天 19:29
我用10楼的NTBOOT外部命令:  详情 回复 发表于 昨天 19:01
回复

使用道具 举报

125#
发表于 昨天 18:52 | 只看该作者
单文件NTBOOT外部命令,用7Z打开,里面有一个NTBOOT.IMG,解压后用7Z打开NTBOOT.IMG,里面有一个NTBOOT.iso,解压挂载此ISO,里面是BOOT.INI、NATIVE.CFG、NTBOOT.NT5、NTDETECT.COM、NTLDR这几个文件。
回复

使用道具 举报

126#
发表于 昨天 19:01 | 只看该作者
2011yaya2007777 发表于 2025-12-7 18:48
我这里测试,NTBOOT单文件或者iso版本,都正常启动到windows图标。iso版本映射为光盘,然后 (0xff)/ntnoot  ...

我用10楼的NTBOOT外部命令:

ScreenShot_2025-12-07_185934_579.png (37.64 KB, 下载次数: 0)

ScreenShot_2025-12-07_185934_579.png

ScreenShot_2025-12-07_190013_967.png (7.4 KB, 下载次数: 0)

ScreenShot_2025-12-07_190013_967.png
回复

使用道具 举报

127#
发表于 昨天 19:06 | 只看该作者
用NTBOOT.iso:

ScreenShot_2025-12-07_190459_630.png (63.64 KB, 下载次数: 0)

ScreenShot_2025-12-07_190459_630.png

ScreenShot_2025-12-07_190526_880.png (6.29 KB, 下载次数: 0)

ScreenShot_2025-12-07_190526_880.png

ScreenShot_2025-12-07_190538_367.png (9.56 KB, 下载次数: 0)

ScreenShot_2025-12-07_190538_367.png

点评

我的测试结果是: title Win7/8/10/11-vhd/vhdx-ntboot.iso(by-chenall,2014/8/24版,大小3296kb) find /vhds/win7_x64.vhd | set bd= find --set-root /boot/g4d/ext/ntboot.iso map --mem /boot/g4d/ext/  详情 回复 发表于 昨天 19:23
回复

使用道具 举报

128#
 楼主| 发表于 昨天 19:23 | 只看该作者

我的测试结果是:

title Win7/8/10/11-vhd/vhdx-ntboot.iso(by-chenall,2014/8/24版,大小3296kb)
find /vhds/win7_x64.vhd | set bd=
find --set-root /boot/g4d/ext/ntboot.iso
map --mem /boot/g4d/ext/ntboot.iso (0xff)
map --hook
(0xff)/ntboot NT6=%bd%/vhds/win7_x64.vhd
boot
#用2025年新版grldr+ntboot.iso,可正常引导Win7/8/10/11的vhd/vhdx系统。
#但用2021-8-13版grldr+ntboot.iso,出现“invalid or unsupported executable format”出错提示。

title Win7VHD-ntboot(by-527104427)
find /vhds/win7_x64.vhd | set bd=
find --set-root /boot/g4d/ext/ntboot
#/boot/g4d/ext/ntboot NT6=%bd%/vhds/win7_x64.vhd NTPATH=system32
/boot/g4d/ext/ntboot NT6=%bd%/vhds/win7_x64.vhd
#上两行之一均可
boot
#引导Win7的vhd系统,目前需grldr(2019-02-22版)+ntboot(527104427的2018版,4294kb)才能成功引导,g4d+ntboot的其他版本组合,将出现"不识别的命令(Unrecogmized conmand)"的出错提示。
#引导Win8/10/11的vhdx系统,用grldr(2019-02-22版及之后新版)+ntboot(527104427的2018版,4294kb),均能正常引导。
回复

使用道具 举报

129#
 楼主| 发表于 昨天 19:29 | 只看该作者
2011yaya2007777 发表于 2025-12-7 18:48
我这里测试,NTBOOT单文件或者iso版本,都正常启动到windows图标。iso版本映射为光盘,然后 (0xff)/ntnoot  ...

请看128楼的测试结果,即新版grldr+ntboot(527104427的2018版,4294kb)不能引导win7的vhd,但能正常引导win8/10/11的vhdx。
有必要对该版本ntboot作适当的修改吗?

回复

使用道具 举报

130#
发表于 昨天 19:45 | 只看该作者
本帖最后由 mygamexxx 于 2025-12-7 20:11 编辑

RUN与SISO外部命令的测试:RUN不断刷屏,显示批处理内容和错误。
RUN使用说明中:title 使用 NTBOOT 启动 NT5.X/NT6.X 系统 \n 需自备NTBOOT.ISO文件,放在 /BOOT/IMGS/ 目录下。RUN没有用于VHD启动的说明。
SISO有增强RUN的VHD启动的说明,有NTBOOT的VHD启动的说明。

ScreenShot_2025-12-07_194116_395.png (32.87 KB, 下载次数: 0)

ScreenShot_2025-12-07_194116_395.png

ScreenShot_2025-12-07_194145_758.png (22.82 KB, 下载次数: 0)

ScreenShot_2025-12-07_194145_758.png

ScreenShot_2025-12-07_193936_775.png (33.22 KB, 下载次数: 0)

ScreenShot_2025-12-07_193936_775.png

ScreenShot_2025-12-07_194000_834.png (5.59 KB, 下载次数: 0)

ScreenShot_2025-12-07_194000_834.png

ScreenShot_2025-12-07_195842_770.png (23.45 KB, 下载次数: 0)

ScreenShot_2025-12-07_195842_770.png

ScreenShot_2025-12-07_200318_682.png (17.84 KB, 下载次数: 0)

ScreenShot_2025-12-07_200318_682.png
回复

使用道具 举报

131#
发表于 昨天 20:47 | 只看该作者
说bug是从2019-03-25补丁引起,但是这个补丁确实看不出怎么会引起这个问题?

这个问题不是100%一定会出现,而是有条件的。比如我的笔记本就不会重现此问题。

点评

单文件NTBOOT、SISO与ntboot.iso的区别: 单文件NTBOOT、SISO挂载为(11),与ntboot.iso挂载为(0xff). 单文件NTBOOT、SISO,出错后进入命令行,通过ls (11)/,可以看到NTBOOT模块是挂载成功的。 用(11)/NTBOOT NT6  详情 回复 发表于 昨天 23:12
如果原版的NTBOOT.iso使用新版G4D没有问题,是否是单文件版的批处理带来的问题?  详情 回复 发表于 昨天 20:55
回复

使用道具 举报

132#
发表于 昨天 20:55 | 只看该作者
本帖最后由 mygamexxx 于 2025-12-7 21:11 编辑
2011yaya2007777 发表于 2025-12-7 20:47
说bug是从2019-03-25补丁引起,但是这个补丁确实看不出怎么会引起这个问题?

这个问题不是100%一定会出 ...

如果原版的NTBOOT.iso使用新版G4D没有问题,是否是单文件版的批处理带来的问题?
cannot find the batch label specified - exit
这个提示。
将ntboot.iso内的grldr替换为20250819版,启动win7_x64.vhd,也是顺利进入WIN7安装界面。说明应该是单文件版和SISO的批处理可能有问题。或者g4d的一些内部函数出现了变化。




回复

使用道具 举报

133#
发表于 昨天 20:58 | 只看该作者
感谢分享
回复

使用道具 举报

134#
发表于 昨天 21:42 | 只看该作者
将SISO用7Z打开,解压得到SISO.IMG。
map --mem siso.img (hd)
root (hd1,0)
/NTBOOT NT6=(hd0,2)/win7_x64.vhd
boot
顺利进入WIN7安装界面。

说明NTBOOT模块是没有问题的,只是外部命令的批处理有问题,不知道如何修改。
回复

使用道具 举报

135#
发表于 昨天 22:09 | 只看该作者
SISO的批处理:
!BAT ::by JexChan QQ:527104427 Date:2016.01.19

::如果将zip启动盘被映射到hd0,那么find 无法找到hd0上的文件,需用cat、ls等命令。
::grub4dos安全的内存地址使用,从64M开始。以下是本工具使用内存概况:

::本批处理,80M开始,512字节:(md)0x28000+1,(md)0x28150+28
::判断文件类型,判断分区是否存在,64M后第4扇区开始,512字节:(md)0x20004+1
::RUN,80M开始,512字节;80M后第100扇区开始,14KB:(md)0x28000+1、(md)0x28100+28
::NTBOOT(ISO版),64M后第38和第40扇区开始,512字节:(md)0x20038+1、(md)0x20040+1
::ISO列表,64M后第8扇区开始,14KB:(md)0x20008+28

::新版grub4dos返回主菜单的命令
::write 0x307ff8 1 && configfile

::扇区数量表示法:(md)0x20008+28表示16进制,从第20008扇区开始,长度为28个扇区,每扇区512字节。0x20008=131080*512/1024/1024=64M
::绝对算法:0x307ff8表示16进制,307ff8字节处。307ff8=3178488/1024=3103KB

::检测grub4dos版本号
checkrange 20141127:-1 read 0x8278 > nul |; echo -e \n $[0105]Grldr is too old.$[0006]Download 2014-11-27 or later From $[0102]http://grub4dos.chenall.net\n\n && pause > nul && write 0x307ff8 1 && configfile ! write 0x307ff8 1 && configfile

::清屏
call Fn.6

::避开某些bios虚拟出来的冗余的软盘
set tmp= && calc *0x8280&0xff/3 > nul || set /a tmp=*0x8280&0xff > nul
read 0x82b8 > nul && calc *0x82b9&0xff/4 > nul || set /a tmp=*0x82b9&0xff > nul
if exist tmp && map --floppies=1 ! map --floppies=0
map --rehook

::检测初始设置,退出时恢复
::如果当前ROOT是(ud),设置当前磁盘为(ud)所在磁盘,比如(fd0)或(hd0)
::if "%?_BOOT%"=="(ud)" && rootnoverify (ud) && calc *0x8280=*0x82b9&0xff ! if "%@root%"=="(ud)" && set ?_BOOT=(ud) && calc *0x8280=*0x82b9&0xff
checkrange 0x21 read 0x8280 > nul && pxe keep
::checkrange 0x21 read 0x8280 > nul && pxe detect NotExist
set DEBUG=
set TERMINAL=
set PAGER=
set FONT=
debug status > nul
set DEBUG=%@retval%
terminal | set TERMINAL=
terminal console
debug 0
pager status > nul
calc %@retval% > nul || set PAGER=off ! set PAGER=on
read 0x1800820 > nul || set FONT=font ! set FONT=
call Fn.0 0 0x8217 | set MEU=

::加载续尾文件
map --mem=0x20000 %~f0 (rd) > nul
cat --locate=\x1f\x8b --number=1 (rd)+1 > nul
calc *0x82d8=*0x82d8-%?% > nul
calc *0x82d0=*0x82d0+%?% > nul
map (rd)+1 (11) > nul
map --rehook

::进入VBE模式
graphicsmode -1 320:800 100:1000 24:32 || echo -e \n Error: Does not support $[1103]VBE mode. && call :Pause 3 && goto :Err1

::第一步,初始化
setlocal
::set *
pager off
::rootnoverify %~d0 > nul
echo %~d0 > (11)/EMPTY
echo %~d0 > (md)0x28000+1

::第二步,设置全局变量
:Start
set /u SISO=%~nx0
set NTBOOT=(fd11)/NTBOOT
::取消背景
calc 46<<2+*0x8304 > nul
read %@retval% > nul && splashimage
::默认字间距和行间距
terminal --font-spacing=0:0
::默认边框颜色
color 11 12 13 14
color border=0x11
::color normal=31 highlight=0x0A helptext=0x1D heading=0x0A standard=0x0F border=0x11
::恢复默认线框、菜单等位置
%NTBOOT%.MOD/menuset u || goto :Err
::第三步,检查模块的完整性
font > nul
font %NTBOOT%.MOD/UNIFONT.HEX > nul || goto :Err
%NTBOOT%.CMD/CHECKFILE || goto :Err
::insmod %NTBOOT%.MOD/NTBOOT.MOD > nul || goto :Err
checkrange 20151216:-1 read 0x8278 > nul && insmod %NTBOOT%.MOD/NTBOOT.MOD > nul && echo -n ! insmod %NTBOOT%.MOD/NTBOOT_O.MOD > nul || goto :Err
cat (11)/EMPTY | set TMP=
if not exist TMP && goto :Err ! set TMP=
::第四步,检查参数是否正确
set TMP2=%*
echo -n > (md)0x28150+28
echo %INPUT% %* > (md)0x28150+28
cat (md)0x28150+28 | set TMP=
if exist TMP && echo -n ! if not exist TMP2 && if not exist INPUT && goto :Input ! call :in_err && goto :Input
%NTBOOT%.CMD/LOOP %INPUT% %* || call :in_err && goto :Input
if exist MAX && call :MAX %MAX.OPT% || goto :Input
if exist CMLINE && set INPUT= && call :Command && goto :Input
if exist QUIT && goto :Exit1
::如果启动盘被识别成fd0,则将其映射到hd0
call Fn.15 "%FD2HD%" "N" && %NTBOOT%.CMD/FD2HD || echo -n
::if /i "%FD2HD%"=="Y" && %NTBOOT%.CMD/FD2HD || echo -n
if exist RUN && set RUN= && goto :RUN
if exist RUNZ && set RUNZ= && goto :RUNZ
if exist NTBUT && set NTBUT= && goto :NTBOOT
if exist WIMBOOT && goto :WIMBOOT
if exist BOOTMGR && goto :WIMBOOT
if exist BCD && goto :WIMBOOT
if exist BOOT.SDI && goto :WIMBOOT
if exist BOOT.WIM && goto :WIMBOOT
if exist E820CYCL && goto :WIMBOOT

call Fn.6
::如果没有AB盘和ISO的参数,直接跳到后面执行
%NTBOOT%.CMD/CHECKVAR %CMD.FILE% || call goto :%TMP^% || goto :Exit
echo -e \n$[0105]***   $[0102]正在搜索所需文件   $[0105]***
::第五步,搜索文件夹
call :FindPath SRS.PATH="%SRS.PATH%" || goto :Input
::第六步,判断文件夹内是否有所需文件
::先列出文件夹内的ISO列表
if exist ISO.PATH && call :ISO_PATH "%ISO.PATH%" .iso ISO ISO.PATH %NTBOOT% || goto :Input
::再处理其它文件夹
if exist SRS.PATH && call :FindSRSFile %SRS.PATH% || goto :Input
::第七步,搜索文件
call :FindFile ISO="%ISO.FILE%" A="%A.FILE%" B="%B.FILE%" SRS="%SRS.FILE%" SIF="%SIF.FILE%" CMD="%CMD.FILE%" || goto :Input
::第八步,加载文件
echo -e \n$[0105]***   $[0102]正在加载驱动文件   $[0105]***
::先仿真DPMS\F6IMG\SRSF6N支持的驱动
if exist SRS && call :LoadFile "(10)"="%SRS%" || goto :Input
if exist SRS.PATH && call :FindSRSFile %SRS.PATH% || goto :Input
::再仿真A、B盘
if exist A.CMD && %A.CMD% %SRS.PATH% %A.OPT% || echo -n
::fd10是SRS驱动的临时仿真盘,加载完卸载
map --unmap=10 > nul && map --rehook
if exist A && call :LoadFile "(0)"="%A%" || goto :Input
if /i "%A%"=="%NTBOOT%.IMG/UNIATA.IMG" && call :uata
call :两个SCSI || call :LoadFile "(1)"="%B%" || goto :Input
::如果ISO文件在光盘上,从VBOOT启动会失败
if "%ISO.ROOT%"=="(cd)" && if /i "%B%"=="%NTBOOT%.IMG/VBOOT.IMG" && set B=
if /i "%B%"=="%NTBOOT%.IMG/VBOOT.IMG" && if exist ISO && call :LoadFile "(0xfd)"=="%NTBOOT%.MOD/VBOOT.ISO" || goto :Input
echo -e \n$[0105]***   $[0102]正在加载镜像文件   $[0105]***
if not /i "%B%"=="%NTBOOT%.IMG/VBOOT.IMG" && call :LoadFile "(15)"="%ISO%" || goto :Input
::将自动挂载参数写入B盘
call :%B.OPT% "(1)" > nul |; if exist B call :Firadisk.x86 "(1)" |; if exist (1)/firadisk.inf call :Firadisk.x86 "(1)" |; if exist (0)/firadisk.inf call :Firadisk.x86 "(0)" || echo -n
::准备winnt.sif自动应答文件
call :CheckOS (15) || echo -n
if exist SIF && call :CopySIF %SIF% || echo -n
if exist SN && cat --locatei="ProductID=" --replace="ProductID=%SN%" (0)/winnt.sif || cat --locatei="ProductKey=" --replace="ProductKey=%SN%" (0)/winnt.sif || echo -n
echo -e \n$[0105]***   $[0102]所有文件准备就绪   $[0105]***\n
call :Pause 3
::交换磁盘
:SWAP
if exist CMD.FILE && %CMD% || echo -n
if not exist ISO if not exist SWAP || %NTBOOT%.CMD/SWAPHD %SWAP% --swap-ext || goto :Exit1
::设置防蓝屏参数
if exist E820 && map --e820cycles=%E820% && map --rehook
::最后一次选择
set keyt= && call Fn.6
calc *0x4cb00=0x1 > nul
call :Text
debug 1
pause --wait=5 && set /A keyt=*0x4cb00 > nul
debug 0
if "%keyt%"=="0x4E" && goto :Exit ! if "%keyt%"=="0x6E" && goto :Exit
if "%keyt%"=="0x51" && goto :Exit1 ! if "%keyt%"=="0x71" && goto :Exit1
if "%keyt%"=="0x48" && set BOOT=harddisk ! if "%keyt%"=="0x68" && set BOOT=harddisk
if "%keyt%"=="0x52" && set BOOT=cdrom ! if "%keyt%"=="0x72" && set BOOT=cdrom
if "%keyt%"=="0x43" && call :Command ! if "%keyt%"=="0x63" && call :Command
set keyt= && calc *0x4cb00=0x1 > nul
::第九步,启动
:BOOT
if /i "%B%"=="%NTBOOT%.IMG/VBOOT.IMG" |; call :SwapFloppy || echo -n
::以下处理DPMS驱动
cat --locatei="1)\x22,\\disk1," --replace="0)\x22,\\disk0," (0)/txtsetup.oem || echo -n
cat --locatei="0)\x22,\\disk0," --replace="1)\x22,\\disk1," (1)/txtsetup.oem || echo -n
FAT ren (0)/DISK1 DISK0 > nul || echo -n
FAT ren (1)/DISK0 DISK1 > nul || echo -n
::以上处理DPMS驱动
if "%BOOT%"=="N" && goto :Exit
if not exist ISO && if not /i "%BOOT%"=="harddisk" && goto :Exit
if /i "%BOOT%"=="harddisk" &; if /i "%B%"=="%NTBOOT%.IMG/VBOOT.IMG" && echo -n ! command %NTBOOT%.LST/DETECT.LST || goto :Exit1 ! goto :Exit1
if not /i "%B%"=="%NTBOOT%.IMG/VBOOT.IMG" && call :BootCD || goto :Exit1
if /i "%BOOT%"=="harddisk" && cat --locatei="boot=cdrom" --replace="boot=harddisk" --number=1 (0xfd)/vboot/grub/grub.cfg > nul || echo -n
if /i "%BOOT%"=="cdrom" && cat --locatei="boot=harddisk" --replace="boot=cdrom   " --number=1 (0xfd)/vboot/grub/grub.cfg > nul || echo -n
map --unmap=11 > nul && map --rehook
kernel (0xfd)/vbootldr && boot ! goto :Exit1

:uata
setlocal
chkpci -srs | set /u WHID=
if exist WHID || chkpci -cc:01 | set /u WHID=
if "%WHID:~0,7%"=="PCI\VEN" && set SRSID=%WHID:~0,21% ! set SRSID=%WHID%
echo [Disks] > (md)0x21C+10
echo -e d1="UniATA Installation Disk by JexChan",\x5Cuniata,\x5C >> (md)0x21C+10
echo [Files.scsi.OEMSCSI] >> (md)0x21C+10
echo driver=d1,uniata.sys,uniata >> (md)0x21C+10
echo inf=d1,uniata.inf >> (md)0x21C+10
echo [scsi] >> (md)0x21C+10
echo OEMSCSI="Alter Group Universal ATA Driver",uniata >> (md)0x21C+10
echo [HardwareIds.scsi.OEMSCSI] >> (md)0x21C+10
echo id="%SRSID%","uniata" >> (md)0x21C+10
echo [bbs.wuyou.net] >> (md)0x21C+10
cat --locate=\0 --replace=#*bbs.wuyou.net*** --number=3 (md)0x21C+10
echo -e -n \r\n[Defaults]\r\nscsi=$$ >> (md)0x21C+10
call Fn.11 0x43800 "$$"
set tmp=%@retval%
call Fn.0 %tmp% "OEMSCSI\r\n"
calc %tmp%+%@retval%-0x43800 > nul
fat copy /o (md)0x21C+10,%@retval% (0)/txtsetup.oem > nul || echo -n
fat mkfile (0)/uniata > nul || echo -n
echo -n %SRSID% >> (0)/uniata.inf
echo -e \n\n\n >> (0)/uniata.inf
endlocal
exit

::如果启动盘被识别成 zip,将被映射到 hd0,find 无法找到 hd0 上的文件
::重新设置 hd0 为当前设备,用 cat、ls 命令可找到hd0上的文件
:获取盘符
cat (md)0x28000+1 | root= > nul || echo -n
cat (11)/EMPTY | root= > nul || echo -n
root () > nul || echo -n
exit

:in_err
clear
echo -e \n$[0104]   错误,请重新输入\n
call :Pause 3
exit

:Text
echo -e \n$[0105]   按"$[0107]N$[0105]"保存所有设置并返回上级菜单\n\n$[0105]   按"$[0107]Q$[0105]"键强制退出,并清除所有设置\n
echo -e \n$[0105]   按"$[0107]H$[0105]"键强制从硬盘启动\n\n$[0105]   按"$[0107]R$[0105]"键强制从ISO启动\n
echo -e \n$[0105]   按"$[0107]C$[0105]"键进入命令行\n
exit

:两个SCSI
map --status=1 && cat --length=0 (1)/txtsetup.oem && echo -n ! exit 1
cat --length=0 (1)/firadisk.inf && exit
cat --length=0 (1)/WinVBlk.INF && exit
cat --length=0 (1)/vbootdsk.inf && exit
cat --length=0 (1)/xp/vbootdsk.inf && exit
echo -e \n$[0102]   B 盘已存在,$[0104]3 $[0102]秒内默认或按$[0104] <Enter> $[0102]覆盖,$[0104] <其它键> $[0102]跳过!\n
set keyt= && calc *0x4cb00=0x1 > nul
debug 1
pause --wait=3 && set /A keyt=*0x4CB00 > nul
debug 0
if /i "%keyt%"=="0x1" && exit 1
if /i "%keyt%"=="0xD" && exit 1
exit

:CopySIF
if "%~1"=="" && exit
map --status=0 || map --mem %NTBOOT%.IMG/EMPTY.IMG (0) && map --rehook ! echo -n
FAT copy /o %SIF% (0)/WINNT.SIF > nul && exit ! echo -n
set TMP=(0)/WINNT.SIF
cat --length=0 %SIF% > nul
FAT mkfile size=%@retval% %TMP% || echo -n
dd if=%SIF% of=%TMP% && exit ! echo -n
::cat %SIF% > %TMP%
::echo -e \r\n >> %TMP%
set TMP=$[0109]“自动应答文件”  $[0104]加载失败
goto :FindPathErr

::软盘重排
:SwapFloppy
map --status=0 || map --status=1 || exit
setlocal
::A盘FIRADISK/WINVBLOCK,无B盘。
map --status=1 |; cat --length=0 (0)/txtsetup.oem || exit ! cat --length=0 (0)/firadisk.inf && exit ! cat --length=0 (0)/winvblk.inf && exit
::A盘空,B盘SRS。
map --status=1 |; map (0)+1 (1) && map --mem %NTBOOT%.IMG/EMPTY.IMG (0) && map --rehook ! exit
::A盘SRS,无B盘。
map --status=0 |; cat --length=0 (1)/txtsetup.oem && map (1)+1 (0) && map --unmap=1 && map --rehook && exit ! exit
::A盘SRS,B盘FIRADISK/WINVBLOCK。
map --status=1 || exit
ls (1)/ > nul || map --unmap=1 && map --rehook && exit
cat --length=0 (1)/firadisk.inf |; cat --length=0 (0)/firadisk.inf && map (0) (1) && map (1) (0) && map --rehook ! echo -n
cat --length=0 (1)/winvblk.inf |; cat --length=0 (0)/winvblk.inf && map (0) (1) && map (1) (0) && map --rehook ! echo -n
::B盘firadisk安装系统,A盘仿真内存的起始地址一定要高出B盘,否则会提示插入A盘
::B盘winvblok安装系统,A盘仿真内存的起始地址一定要低于B盘,否则会提示插入A盘
::http://bbs.wuyou.com/forum.php?m ... p;extra=&page=1
map --status=1 || exit
set /a addr1=%?% > nul
map --status=0 || exit
set /a addr0=%?% > nul
if %addr0%>=%addr1% && set fdn=0 ! set fdn=1
if %fdn%==0 && cat --length=0 (1)/firadisk.inf && exit ! if %fdn%==1 && cat --length=0 (1)/winvblk.inf && exit
map (%fdn%)+1 (rd) && map --mem (rd)+1 (%fdn%) && map --rehook ! echo -n
endlocal
exit

:CheckOS
set TMP=%NTBOOT%.MOD/WINNT.SIF
::如果是XP,则注释掉SIF中的两项
cat --length=0 %~1/WIN51IC.SP3 && cat --locatei=AutoMode --replace=;;;;;;;; --number=1 %TMP% > nul
cat --length=0 %~1/WIN51IC.SP3 && cat --locatei=AutoUsers --replace=;;;;;;;; --number=1 %TMP% > nul
cat --length=0 %~1/WIN51IP.SP3 && cat --locatei=AutoMode --replace=;;;;;;;; --number=1 %TMP% > nul
cat --length=0 %~1/WIN51IP.SP3 && cat --locatei=AutoUsers --replace=;;;;;;;; --number=1 %TMP% > nul
cat --locatei=ProductID --number=1 %TMP% > nul && set TMP2=ProductID ! cat --locatei=ProductKey --number=1 %TMP% > nul && set TMP2=ProductKey ! set TMP= && exit
cat --length=0 %~1/CDROM_IP.5 && cat --locatei="%TMP2%" --replace="%TMP2%=BR8YY-4FV82-HR7DX-GGH89-W4PDJ" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]Win2kSP4标准版
cat --length=0 %~1/CDROM_IS.5 && cat --locatei="%TMP2%" --replace="%TMP2%=H6TWQ-TQQM8-HXJYG-D69F7-R84VM" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]Win2kSP4服务器版
cat --length=0 %~1/CDROM_IA.5 && cat --locatei="%TMP2%" --replace="%TMP2%=KRJQ8-RQ822-YRMXF-6TTXC-HD2VM" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]Win2kSP4高级服务器版
cat --length=0 %~1/WIN51IC.SP3 && cat --locatei="%TMP2%" --replace="%TMP2%=JYF4F-8GQTQ-KT87M-PYXC3-MDF7G" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]32位winxpsp3家庭版
cat --length=0 %~1/WIN51IP.SP3 && cat --locatei="%TMP2%" --replace="%TMP2%=MRX3F-47B9T-2487J-KWKMF-RPWBY" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]32位winxpsp3专业版
cat --length=0 %~1/WIN51AS && cat --locatei="%TMP2%" --replace="%TMP2%=BBGTH-2VC48-J98CM-969J7-3YPMJ" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]64位2003SP2标准版
cat --length=0 %~1/WIN51AA && cat --locatei="%TMP2%" --replace="%TMP2%=BBGTH-2VC48-J98CM-969J7-3YPMJ" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]64位2003SP2企业版
cat --length=0 %~1/WIN51IS.SP2 && cat --locatei="%TMP2%" --replace="%TMP2%=JCB3T-9CDQ4-K2X38-2HXRB-VX8YB" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]32位2003SP2标准版
cat --length=0 %~1/WIN51IA.sp2 && cat --locatei="%TMP2%" --replace="%TMP2%=JCB3T-9CDQ4-K2X38-2HXRB-VX8YB" --number=1 %TMP% > nul && echo -e \n$[0102]   ISO版本:$[0104]32位2003SP2企业版
set TMP2=
set TMP=
exit

:Winvblk.x64
cat --locatei=WinVBlock32 --replace=WinVBlock64 --number=1 (1)/TXTSETUP.OEM > nul
cat --locatei=WVBlk32 --replace=WVBlk64 (1)/AMD64/WINVBLOCK.CMD > nul
:Winvblk.x86
cat --locatei=";SystemRoot" --replace="%SystemRoot" --number=1 %NTBOOT%.MOD/WINNT.SIF > nul
::普通winvblock驱动处理(没测试)
::echo > (md)0x200+4
::map --heads=2 --sectors-per-track=18 --mem (md)0x200+4 (0x55)
::map --rehook
::write (0x55) #GRUB4DOS\x00v=1\x00%ISO.FILE:~1%\x00\x80\x00
exit

:Vboot.2k
cat --locatei="SCSI=XPD32" --replace="SCSI=2KD32" --number=1 (1)/TXTSETUP.OEM > nul
goto :Vboot.xp
:Vboot.2k3
cat --locatei="SCSI=XPD32" --replace="SCSI=2K3D32" --number=1 (1)/TXTSETUP.OEM > nul
goto :Vboot.xp
:Vboot.x64
cat --locatei="SCSI=XPD32" --replace="SCSI=XPD64" --number=1 (1)/TXTSETUP.OEM > nul
:Vboot.xp
if not exist ISO && exit
echo rmmod vboot  > (0xfd)/vboot/grub/grub.cfg
echo insmod /vboot/grub/vboot.mod  >> (0xfd)/vboot/grub/grub.cfg
echo -n vboot  >> (0xfd)/vboot/grub/grub.cfg
::VBOOT只能识别小写
uuid %ISO.ROOT%
set /l UUID=%?%
::cdrom的UUID为空,下面的参数将写入失败,清掉B的变量,启动时将不会从VBOOT启动
if not exist UUID && set B= && map --unmap=0xfd && map --rehook && exit
set /l ISO.FILE=%ISO.FILE%
echo -e -n cdrom=(UUID=%UUID%)"%ISO.FILE%"  >> (0xfd)/vboot/grub/grub.cfg
if not exist BOOT && set TMP=cdrom ! call Fn.15 "%BOOT%" "N" && set TMP=%BOOT% ! set TMP=harddisk
echo -e boot=%TMP%     \nboot >> (0xfd)/vboot/grub/grub.cfg
set TMP=
exit

:Firadisk.x64
set TMP=
cat --locatei=firadiskx86 --replace=firadiskx64 --number=1 %~1/TXTSETUP.OEM > nul
:Firadisk.x86
::注释掉内置winnt.sif中以SystemRoot开头的一项
::cat --locatei=SystemRoot --number=1 %NTBOOT%.MOD/WINNT.SIF | set TMP= > nul
::if not exist TMP && goto :Firadiskx86.opt
::set /A TMP=0x%TMP%-0x1 > nul
::write --offset=%TMP% %NTBOOT%.MOD/WINNT.SIF ; > nul && set TMP=
::写入自动挂载参数
:Firadiskx86.opt
if not exist ISO && exit
cat --locate="value=Parameters" %~1/TXTSETUP.OEM > nul && goto :Firadiskx64.opt
cat --locatei=###### --number=1 %~1/TXTSETUP.OEM | set TMP= > nul
if not exist TMP && exit 1
set /A TMP=0x%TMP% > nul
write --offset=%TMP% %~1/TXTSETUP.OEM value=Parameters,StartOptions,REG_SZ,"cdrom,vmem=find:%ISO.FILE%;"\r\n > nul
cat --skip=%TMP% --locate=/ --replace=\\ %~1/TXTSETUP.OEM > nul && set TMP=
:Firadiskx64.opt
cat --locate="value=Parameters" %~1/AMD64/TXTSETUP.OEM > nul && goto :driver_manu
cat --locatei=###### --number=1 %~1/AMD64/TXTSETUP.OEM | set TMP= > nul
if not exist TMP && exit 1
set /A TMP=0x%TMP% > nul
write --offset=%TMP% %~1/AMD64/TXTSETUP.OEM value=Parameters,StartOptions,REG_SZ,"cdrom,vmem=find:%ISO.FILE%;"\r\n > nul
cat --skip=%TMP% --locate=/ --replace=\\ %~1/AMD64/TXTSETUP.OEM > nul && set TMP=
exit
::普通firadisk驱动处理(没测试)
:driver_manu
::echo > (md)0x200+4
::map --heads=2 --sectors-per-track=18 --mem (md)0x200+4 (0x55)
::map --rehook
::write (0x55) [FiraDisk]\nStartOptions=cdrom,vmem=find:%ISO.FILE%;\n\0
exit

:LoadFile
set MEM=
set TMP=%~1
if not exist TMP && exit
if "%~1"=="(15)" &; if exist ISO_MEM && set MEM=--mem ! if exist MAX_MEM && set MEM=--mem
if "%~1"=="(0xfd)" && set MEM=--mem
if "%~1"=="(1)" && set MEM=--mem
if "%~1"=="(0)" && set MEM=--mem
shift 1
if "%~1"=="" && if "%~2"=="" && set TMP= && exit ! if "%~1"=="" && shift 1 && goto :LoadFile
::map --status=%TMP:~1,-1% && map --unmap=%TMP:~1,-1% && map --rehook
:Load
map %MEM% %~1 %TMP% || set MEM=--mem && goto :Load
map --rehook
map --status=%TMP:~1,-1% && root %TMP% > nul && echo -n ! if exist MEM && set TMP=$[0109]“%~1”  $[0104]加载失败 && goto :FindPathErr ! set MEM=--mem && goto :Load
if "%TMP%"=="(10)" && set SRS.PATH=%TMP% && set SRS=
shift 1
goto :LoadFile

:FindPath
set TMP=%~1
if not exist TMP && exit
shift 1
if "%~1"=="" && if "%~2"=="" && set TMP= && exit ! if "%~1"=="" && shift 1 && goto :FindPath
call :获取盘符
debug 1
root () > nul || echo -n
ls %~1/ > nul && root %~d1 > nul ! ls %~pnx1/ > nul || find --set-root ls %~pnx1/ > nul || goto :Checkerr
debug 0
set %TMP%=%@root%%%~pnx1 || echo -n
shift 1
goto :FindPath
:Checkerr
debug 0
set TMP=$[0109]“%~pnx1/”  $[0104]不存在(或为空文件夹)
goto :FindPathErr

:FindFile
set TMP=%~1
if not exist TMP && exit
shift 1
if "%~1"=="" && if "%~2"=="" && set TMP= && exit ! if "%~1"=="" && shift 1 && goto :FindFile
call :获取盘符
root () > nul || echo -n
cat --length=0 %~1 > nul && root %~d1 > nul ! cat --length=0 %~pnx1 > nul || find --set-root cat --length=0 %~pnx1 > nul || goto :CheckFont
set %TMP%.ROOT=%@root% || echo -n
set %TMP%.FILE=%~pnx1 || echo -n
set %TMP%=%@root%%%~pnx1 || echo -n
shift 1
goto :FindFile
:CheckFont
if not "%TMP%"=="MEU" && set TMP=找不到   $[0109]“%~pnx1” ! set TMP=$[0109]"%~pnx1"  $[0104]Does not exist
goto :FindPathErr

:FindSRSFile
set TMP=
if "%~1"=="" && exit
if /i "%A.CMD%"=="%NTBOOT%.CMD/SRSF6N" && call :SRSF6N %~1 || goto :FindPathErr
if /i "%A.CMD%"=="%NTBOOT%.CMD/DPMS" && call :DPMS %~1 || goto :FindPathErr
exit
:SRSF6N
cat --length=0 %~1/TXTSETUP.OEM && exit
cat --length=0 %~1/OEM/TXTSETUP.OEM && exit
cat --length=0 %~1/TXTSETUP.SIF && exit
cat --length=0 %~1/SIF/TXTSETUP.SIF && exit
cat --length=0 %~1/SRSID.TXT && exit
cat --length=0 %~1/SRSID/SRSID.TXT && exit
set TMP=$[0109]%~0  $[0104]支持的驱动不存在
exit 1
:DPMS
cat --length=0 %~1/DRIVERPACK.INI && exit
set TMP=$[0109]%~0  $[0104]支持的驱动不存在
exit 1

:ISO_PATH
echo
command %NTBOOT%.CMD/LIST show%~2 %~1 || echo -n
call Fn.6
if not exist filename && set TMP=$[0109]“%~1”  $[0104]内未发现需要的文件 && goto :FindPathErr
command %NTBOOT%.CMD/EMPPATH filename="%filename%" || echo -n
call :set_file_name %filename%
set %~3.ROOT=%fileroot% || echo -n
set %~3=%fileroot%%%filename% || echo -n
set %~3.FILE=%fileroot%%%filename% || echo -n
set fileroot=
set filename=
set %~4=
exit

:set_file_name
set fileroot=%~d1
set filename=%~pnx1
exit

:FindPathErr
echo -e \n$[0104]   %TMP%\n && call :Pause 3
set TMP2=
set TMP=
exit 1

::手动输入模块
:Input
shift 1
call Fn.15 "" "%~1" && goto :Input
%NTBOOT%.CMD/HELPTXT || goto :Err
if not exist SISO && set /u SISO=%~nx0
set /p INPUT=%SISO%>  || goto :Input
goto :Start

:RUN
shift 1
set RUN.OPT= && %NTBOOT%.CMD/RUNS %* || echo -n
goto :Exit

:RUNZ
shift 1
set RUNZ.OPT= && %NTBOOT%.CMD/RUNZ %* || echo -n
goto :Exit

:NTBOOT
shift 1
set NTBUT.OP=%*
if not exist NTBUT.OP && set NTBUT.OP=menu
set NTBUT.OP= && %NTBOOT% %NTBUT.OP% || echo -n
goto :Exit

:Command
commandline
exit

:Pause
debug 1
pause --wait=%~1
debug 0
exit

:WIMBOOT
echo -e \n$[0105]***   $[0102]正在搜索 所需文件   $[0105]***
call :FindFile WIMBOOT="%WIMBOOT%" BOOTMGR="%BOOTMGR%" BCD="%BCD%" BOOT.SDI="%BOOT.SDI%" BOOT.WIM="%BOOT.WIM%" || goto :Input
if not exist BOOT.WIM && set TMP=$[0109]错误,没有指定 $[0104]WIM $[0109]文件 && call :FindPathErr || goto :Input
if not exist WIMBOOT && set WIMBOOT=%NTBOOT%.MOD/wimboot
if not exist BOOTMGR && set BOOTMGR=(3)/bootmgr
if not exist BCD && set BCD=(3)/bcd
if not exist BOOT.SDI && set BOOT.SDI=(3)/boot/boot.sdi
if exist E820CYCL && map --e820cycles=%E820CYCL%
map --mem %NTBOOT%.MOD/NTBOOT.NT6 (3)
map --rehook
echo -e \n$[0105]***   $[0102]所有文件 准备就绪   $[0105]***
echo -e \n$[0105]***   按 "$[0107]C$[0105]" 进入命令行   ***\n
calc *0x4cb00=0x1 > nul
debug 1
pause --wait=3 && set /A keyt=*0x4cb00 > nul
debug 0
if "%keyt%"=="0x43" && call :Command ! if "%keyt%"=="0x63" && call :Command
set keyt= && calc *0x4cb00=0x1 > nul
kernel %NTBOOT%.MOD/wimboot
initrd @bootmgr=%BOOTMGR% @bcd=%BCD% @boot.sdi=%BOOT.SDI% @boot.wim=%BOOT.WIM%
boot
goto :Exit1

:Err
call Fn.6
set TMP=
read 0x1800820 > nul && set TMP=SISO内置模块缺失 ! set TMP=SISO is missing files
::cat --length=0 %NTBOOT%.MOD/UNIFONT.HEX || set TMP=SISO is missing files
echo -e \n$[0104]   %TMP%\n && set TMP=
call :Pause 3
:Exit1
cat --length=0 (11)/EMPTY && cat (11)/EMPTY > (md)0x28000+1 || echo -n
map --unmap=0:0xff > nul
map --rehook
:Exit
call Fn.6
delmod fat > nul
delmod chkpci > nul
delmod wenv > nul
delmod inifile > nul
delmod diskid > nul
::delmod diskid2 > nul
delmod slic > nul
calc *0x4cb00=0x1 > nul
cat --length=0 (11)/EMPTY && cat (11)/EMPTY > (md)0x28000+1 || echo -n
endlocal && set list=%list% && set fileroot=%fileroot% && set filename=%filename% && set filepath=%filepath%
:Err1
call Fn.6
map --unmap=11 > nul
map --rehook
%FONT%
pager %PAGER% > nul
debug %DEBUG%
terminal %TERMINAL% > nul
set DEBUG=
set TERMINAL=
set PAGER=
set FONT=
if exist list && set MEU= && exit
if exist fileroot && set MEU= && exit
if exist filename && set MEU= && exit
if exist filepath && set MEU= && exit
if "%MEU:~,4%"=="(md)" || if "%MEU:~,4%"=="(rd)" || call :FindFile MEU="%MEU%" || write 0x307ff8 1 && set MEU=
::cat %MEU% | set TMP=
::if not exist TMP && set MEU= && write 0x307ff8 1
set MEU.ROOT=
set MEU.FILE=
set TMP=
set MEU= && configfile %MEU% || echo -n
boot || echo -n
exit

::暂时没用
:SetMenu
calc *0x307FFC-0x110000 > nul && set MEU=(md)4+8 ! set MEU=(md)0x880+0x200
exit








::传递MAXDOS参数、或启动IMG、ISO镜像
:MAX
call Fn.6

::筛选参数
shift 1
set MAX.OPT=%*
%NTBOOT%.CMD/MAXFILE %MAX.OPT% || goto :MAXErr1

::搜索文件
if exist MAX.PATH && call :ISO_PATH "%MAX.PATH%" .img.ima.iso.gz.lzma MAX MAX.PATH %NTBOOT% || exit 1
if exist MAX.FILE && call :FindFile MAX="%MAX.FILE%" || exit 1

::非备份还原的情况
if exist B.FILE && call :LOOP_VAR || goto :MAXErr1
if not exist MAX.OPT && goto :MAXLoad
if not exist GHO.PATH && if not exist GHO && if not exist HD && goto :MAXLoad

::备份还原参数处理
if not exist B.FILE && if not exist HD && set HD=(hd0,0)
call :Geometry "%HD%" || set TMP=错误,您输入的$[0109]目标分区$[0104]不存在 && goto :FindPathErr
if exist GHO.PATH && call :LOOP_GHO || exit 1
call :%MAX.OPT% "%GHO%" || exit 1
call :LoopHD "%GHO.ROOT:~,3%" || exit 1
if /i "%MAX.OPT%"=="bak" && set p=%GHO% && set m=0 && call :Loopfld && goto :MAXLoad
if exist GHO && echo -e \n$[0105]***   $[0102]找到镜像文件 $[0109]%GHO%   $[0105]***

::加载文件
:MAXLoad
echo -e \n$[0105]***   $[0102]正在加载$[0109]%MAX%   $[0105]***\n
if exist MAX.OPT && set MAX_MEM=yes
call :LoadFile "(1)"="%B.FILE%" "(15)"="%MAX%" || exit 1
if exist B.OPT && set ISO=%MAX% && set ISO.ROOT=%MAX.ROOT% && set ISO.FILE=%MAX.FILE% && call :%B.OPT% "(1)" || echo -n

if not exist MAX.OPT && goto :BootCD
if exist MAX.OPT && call :FindMAXFile %MAX.OPT% || goto :MAXErr2
if exist MAX.OPT && call :MAX.OPT %MAX.OPT% || goto :MAXErr2
if not exist GHO && if not exist HD && goto :BootCD
call :%MAX.OPT%.bat %GHO% || goto :MAXErr2

::判断是否为光盘镜像,兼容0.46a
:BootCD
echo -n > (md)0x20004+1
debug on
root (15) > (md)0x20004+1 || echo FileSystem is udf > (md)0x20004+1 || echo -n
debug off
cat --locatei="is udf" --number=1 (md)0x20004+1 > nul
calc %@retval% > nul || cat --locatei="is iso" --number=1 (md)0x20004+1 > nul
calc %@retval% > nul && set root=(0xfa) && set boot=chainloader (0xfa) ! set root=(0) && set boot=chainloader (0)+1
map --unmap=11 && map --unmap=15 && map (15) %root% || echo -n
map --rehook
root %root% > nul || echo -n
%boot% && boot ! goto :MAXErr3

:LOOP_VAR
if exist MAX.OPT && exit 1
if exist GHO && exit 1
if exist GHO.PATH && exit 1
if exist HD && exit 1
if exist T && exit 1
exit

:LOOP_GHO
if not "%GHO.PATH%"="/" && call :LoopHD "%GHO.PATH:~,3%" || exit 1
call :ISO_PATH "%GHO.PATH%" .gho.ggh.max.jex GHO GHO.PATH %NTBOOT% || exit 1
call :LoopHD "%GHO.FILE:~,3%" || exit 1
exit

::计算目录层数
:Loopfld
if not "%GHO:~,1%"=="(" && exit
::搜索......特征字符串
if "%p%"=="" || echo -n ! cat --locatei="\x2E\x2E\x2E\x2E\x2E\x2E" --replace="%m%\r\nexit\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" (15)/soft/ghost/setgho4.bat && exit ! exit
call :Loop_1 "%p%"
goto :Loopfld

:Loop_1
set p=%~p1
if "%p%"=="/" && set p= && exit
set p=%p:~0,-1%
if exist %~d1%p% && cat --length=0 %~d1%p% || set /a m=%m%+1 > nul
exit

:FindMAXFile
if "%~1"=="" && exit
set ext=.bat
if /i "%~1"=="2grub" && cat --locatei="default=" --replace="default=J" --number=1 (15)/config.sys > nul || exit 1
if /i "%~1"=="kon" && cat --locatei="default=" --replace="default=J" --number=1 (15)/config.sys > nul || exit 1
if exist MODE && cat --locatei="default=" --replace="default=%MODE%,0" --number=1 (15)/config.sys > nul || exit 1
:FindMAXFile_1
cat --length=0 (15)/soft/%~1%ext% && exit
cat --length=0 (15)/soft/cmos/%~1%ext% && exit
cat --length=0 (15)/soft/disk/%~1%ext% && exit
cat --length=0 (15)/soft/dm/%~1%ext% && exit
cat --length=0 (15)/soft/drivers/%~1%ext% && exit
cat --length=0 (15)/soft/ghost/%~1%ext% && exit
cat --length=0 (15)/soft/grub/%~1%ext% && exit
cat --length=0 (15)/soft/mem/%~1%ext% && exit
cat --length=0 (15)/soft/other/%~1%ext% && exit
cat --length=0 (15)/soft/pxe/%~1%ext% && exit
if "%ext%"==".bat" && set ext=.exe && goto :FindMAXFile_1
if "%ext%"==".exe" && set ext=.com && goto :FindMAXFile_1
exit 1

:MAX.OPT
if /i "%~1"=="bak" && call :NO_Tips_op || exit 1
if not exist HD.ID && set HD.ID=1
if not exist HD.EP && set HD.EP=1
if not exist T && set T=2
cat --locatei="gh.bat" --replace="%~1%ext%  %TOOL.OPT%\r\n         " (15)/autoexec.bat > nul || exit 1
cat --locatei=":_ghokm \x23" --replace=":_ghokm \x23%PW%" (15)/soft/ghost/br.bat > nul || exit 1
if /i "%T%"=="NOTips" && goto :NO_Tips
::默认第%HD.ID%硬盘,倒计时2秒。
cat --locatei=1,. --replace=%HD.ID%,%T% (15)/soft/ghost/br.bat > nul || exit 1
::默认第%HD.EP%分区,倒计时2秒。
cat --locatei=1,, --replace=%HD.EP%,%T% (15)/soft/ghost/br.bat > nul || exit 1
::倒计时2秒。
cat --locatei=1,0 --replace=1,%T% (15)/soft/ghost/br.bat > nul || exit 1
cat --locatei=4,0 --replace=4,%T% (15)/soft/ghost/br.bat > nul || exit 1
exit
:NO_Tips
::禁止WBOX窗口。
cat --locatei="call w.bat box" --replace=":: " --number=3 (15)/soft/ghost/br.bat > nul
cat --locatei="call w.bat list" --replace=":: " --number=2 (15)/soft/ghost/br.bat > nul
::搜索以 if "%?%" 开头的行,并注销此行。(WBOX选择窗口的返回值,必须注销)。总共替换7行。
cat --locatei=\x69\x66\x20\x22\x25\x3F\x25\x22 --replace=":: " --number=7 (15)/soft/ghost/br.bat > nul
::默认选择第1硬盘。
cat --locatei="set hd_id=%?^%" --replace="set hd_id=%HD.ID%\r\n  " --number=1 (15)/soft/ghost/br.bat > nul
::默认选择第1分区。
cat --locatei="set hd_cp=" --replace="set hd_cp=%HD.EP%\r\n  " --number=1 (15)/soft/ghost/br.bat > nul
exit
:NO_Tips_op
echo -n > (md)0x20004+1
if not exist HD && set HD=(hd0,0)
geometry %HD% > (md)0x20004+1 || echo -n
cat --locatei="num: 1," --number=1 (md)0x20004+1 > nul && exit
cat --locatei="num: 4," --number=1 (md)0x20004+1 > nul && exit
::搜索有 "%hd_ep%" g 编码的行,替换为""。(单分区的硬盘会报错,故注销此句)。替换1次
cat --locatei=\x22\x25\x68\x64\x5F\x65\x70\x25\x22\x20\x67 --replace=\x22\x22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 --number=1 (15)/soft/ghost/br.bat > nul || exit 1
::搜索pdump,替换为create。备份只有一个分区的硬盘,只能用create。替换1次
cat --locatei=pdump --replace="create,src=%sp^%\r\n\0\0\0\0\0\0" --number=1 (15)/soft/ghost/br.bat > nul || exit 1
exit

:auto
if "%~1"=="" && exit
root (cd) > nul || set TMP=错误,不存在$[0109]光盘 && goto :FindPathErr
cat --length=0 (cd)%~pnx1 > nul || set TMP=错误,不存在$[0109]%~1 && goto :FindPathErr
set GHO=(cd)%~pnx1
%NTBOOT%.CMD/SETHD HD="%HD%"
exit

:res
if "%~1"=="" && exit
root () > nul || echo -n
cat --length=0 %~1 > nul && root %~d1 > nul ! cat --length=0 %~pnx1 > nul || find --set-root --devices=h cat --length=0 %~pnx1 > nul || set TMP=错误,不存在$[0109]%~1 && goto :FindPathErr
set GHO=%@root%%%~pnx1
set GHO.ROOT=%@root%
:bak
if exist GHO.ROOT || if "%GHO:~,1%"=="(" && set GHO.ROOT=%~d1
if exist GHO.ROOT && call :Geometry "%GHO.ROOT%" || set TMP=错误,保存镜像的分区不存在 && goto :FindPathErr
%NTBOOT%.CMD/SETHD GHO="%GHO.ROOT%" HD="%HD%"
if "%HD.ID%:%HD.EP%"=="%GHO.ID%:%GHO.EP%" && set TMP=错误,$[0109]Ghost$[0104]分区与$[0109]GHO$[0104]路径相同 && goto :FindPathErr
exit

:auto.bat
if "%~1"=="" && exit
cat --locatei="\\system\\win.gho" --replace="%~pnx1\r\nexit\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" (15)/soft/ghost/setgho3.bat || exit 1
cat --locatei=/ --replace=\\ (15)/soft/ghost/setgho3.bat || exit 1
exit

:bak.bat
:res.bat
if "%~1"=="" && exit
if not exist GHO.ID && goto :N.ID
cat --locatei="%hd_id^%:%hd_ep^%:" --replace="%GHO.ID%:%GHO.EP%:%~pnx1\r\nexit\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" (15)/soft/ghost/setgho1.bat || exit 1
cat --locatei=/ --replace=\\ (15)/soft/ghost/setgho1.bat || exit 1
exit
:N.ID
cat --locatei=":\\" --replace=":%~pnx1\r\nexit\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" (15)/soft/ghost/setgho1.bat || exit 1
cat --locatei=/ --replace=\\ (15)/soft/ghost/setgho1.bat || exit 1
exit

:MAXErr1
%NTBOOT%.CMD/MAXHELP
exit 1

:MAXErr2
set TMP=错误,此镜像没有$[0109]您所需要的功能
map --unmap=0 && map --rehook
goto :FindPathErr

:MAXErr3
set TMP=错误,不是一个$[0109]可启动$[0104]的镜像
goto :FindPathErr

:LoopHD
if "%~1"=="" && exit
if /i "%MAX.OPT%"=="auto" && exit
if "%~1"=="(hd" && exit
set TMP=错误,$[0109]GHO文件$[0104]不在硬盘上
goto :FindPathErr

:Geometry
set TMP=%~1
if "%TMP%"=="" && exit 1
echo -n > (md)0x20004+1
geometry %TMP% > (md)0x20004+1 || exit 1
cat --locatei="num: %TMP:~-2,1%," --number=1 (md)0x20004+1 > nul || exit 1
exit
回复

使用道具 举报

136#
发表于 昨天 22:46 | 只看该作者
10楼单文件NTBOOT的批处理:
!BAT ::by JexChan QQ:527104427 Date:2018.06.22
checkrange 20141127:-1 read 0x8278 > nul || clear && echo -e \n Error: You should use grub4dos-0.4.5c-2014-11-27 or above. && call :Pause && configfile (md)4+8
call Fn.6
checkrange 0x21 read 0x8280 > nul && pxe keep
debug 0
map --mem=0x20000 %~f0 (rd) > nul
cat --locate=\x1f\x8b --number=1 (rd)+1 > nul
calc *0x82d8=*0x82d8-%?% > nul
calc *0x82d0=*0x82d0+%?% > nul
map (rd)+1 (11) > nul
map --rehook
set NTBOOT=(fd11)/NTBOOT
cat --length=0 %NTBOOT% || echo NTBOOT is missing files && exit
set NTBUT.OP=%*
if not exist NTBUT.OP && set NTBUT.OP=menu
command %NTBOOT% %NTBUT.OP% || echo -n
write 0x307ff8 1 && configfile || echo -n
boot || echo -n
exit

:Pause
pause --wait=%~1 || pause > nul
exit
回复

使用道具 举报

137#
发表于 昨天 23:12 | 只看该作者
本帖最后由 mygamexxx 于 2025-12-8 06:57 编辑
2011yaya2007777 发表于 2025-12-7 20:47
说bug是从2019-03-25补丁引起,但是这个补丁确实看不出怎么会引起这个问题?

这个问题不是100%一定会出 ...

单文件NTBOOT、SISO与ntboot.iso的区别:
单文件NTBOOT、SISO挂载为(11),与ntboot.iso挂载为(0xff)。

单文件NTBOOT、SISO,出错后进入命令行,通过ls (11)/,可以看到NTBOOT模块是挂载成功的。
(11)/NTBOOT NT6=(hd0,2)/win7_x64.vhd会出错。

ScreenShot_2025-12-08_065544_265.png (11.1 KB, 下载次数: 0)

ScreenShot_2025-12-08_065544_265.png

ScreenShot_2025-12-08_065644_538.png (13.75 KB, 下载次数: 0)

ScreenShot_2025-12-08_065644_538.png
回复

使用道具 举报

138#
发表于 6 分钟前 | 只看该作者
再测试:

ScreenShot_2025-12-08_070205_698.png (12.16 KB, 下载次数: 0)

ScreenShot_2025-12-08_070205_698.png

ScreenShot_2025-12-08_070251_871.png (18.24 KB, 下载次数: 0)

ScreenShot_2025-12-08_070251_871.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-8 07:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表