无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 24360|回复: 55
打印 上一主题 下一主题

[已解决] 用grub4dos+ntboot不能启动存放在gpt分区中的原生VHD系统的替代方法

  [复制链接]
1#
发表于 2014-8-17 09:02:02 | 显示全部楼层
回复

使用道具 举报

2#
发表于 2014-8-17 09:02:42 | 显示全部楼层
原来是这样的
!BAT
debug off
checkrange 20111212:-1 read 0x8278 || call :error Not supported grub4dos version!
set NTBOOT=%~f0
setlocal
set ISO_TYPE=
set ISO_INST=
set NTPATH=
echo
echo NTBOOT by chenall 2013-07-22,$[0101]http://chenall.net
goto %~1 || goto :NTBOOT_HELP

:FIRADISK.E820
:WINVBLK.E820
:VBOOT.E820
:PE1.E820
if "%~1"=="" && exit
call Fn.15 "%~1" "0" && set /a e820=%~1 && call if /i "%e820^%"=="0" && exit
checkrange 0:-1 calc %e820% || exit
map --e820cycles=%~1 && map --rehook
exit

:e820
shift 1
set e820=%~1
if not exist e820 && goto :NTBOOT_HELP
call Fn.15 "%~1" "0" && set /a e820=%~1 && call if /i "%e820^%"=="0" && goto :NTBOOT_HELP
checkrange 0:-1 calc %e820% || goto :NTBOOT_HELP
map --e820cycles=%e820% && map --rehook && shift 1
set e820= && goto %~1 || goto :NTBOOT_HELP

:menu
echo %~f0 > (md)0x20000+1
cat %NTBOOT%.MOD/setf0 > (md)0x20002+1 || echo -n
configfile %NTBOOT%.LST/MENU.LST
exit

::检测下一个文件。在使用call :CHECK_FILE %FILE1% %FILE2% 之类的情况下会用到
:CHECK_NEXT_FILE
set tmp=%~2
if not exist tmp && goto :input_file
shift
if "%~0"=="%~1" && goto :CHECK_NEXT_FILE
::检查/查找文件
:CHECK_FILE
echo -e Checking file $[0107]%~1 ...
set file=%~1
set tmp=%~pnx1
cat --length=0 %~f1 > nul && root %~d1 > nul ! cat --length=0 %~pnx1 > nul && echo -n ! find --set-root cat --length=0 %~pnx1 > nul || goto :CHECK_NEXT_FILE
goto :eof

:input_file
::获取用户输入的文件,
echo
echo File not found or not support: $[0105]%file%
echo
echo -e Please enter a new path to the file: $[0104]%~x1
set file=
set /p:5 file=NTBOOT>
if not exist file goto :exit
echo -n > (md)0x28150+28
echo %file% > (md)0x28150+28
cat (md)0x28150+28 | set tmp=
if not exist tmp && goto :input_file
set tmp=%~x1
set tmp=%tmp:~0,3%
call Fn.11 "%file%" "%tmp%" || goto :input_file
echo
command %NTBOOT%.CMD/EMPPATH file="%file%"
call :CHECK_FILE %file%
exit

:NT5
:NT6
:PE1
::检测需要的模块
insmod %NTBOOT%.MOD/NTBOOT.MOD || call :error Missing module NTBOOT.MOD...
::映射NTBOOT启动镜像
set /u file=NTBOOT.%~1
map --mem %NTBOOT%.MOD/%file% (rd) || call :error Missing module %file%...

:NTBOOT_START
::设置默认WINDOWS路径
if not exist WinDir set WinDir=WINDOWS
set boot_cfg=
shift
set file=%~1
set tmp=/%WinDir%
::如果没有加参数或参数是一个磁盘分区
if not exist file && goto %~0.HDD
if "%~d1"=="%~1" && goto %~0.HDD
::以上是NT5或NT6硬盘启动
if /i "%~0"=="pe1" && set PDIR=WXPE && goto :PE1_BOOT
command %NTBOOT%.CMD/EMPPATH file="%file%"
call :CHECK_FILE %file%
::转到对应的启动类别,比如NT5.IMG_BOOT,NT6.WIM_BOOT,NT6.VHD_BOOT
goto %~0%~x1_BOOT

:NT5.HDD
echo -e Searching NT5.X on Hard Disk(/%WinDir%)
if exist file && root %~1 ! find --set-root --devices=h /%WinDir%/system32/ntoskrnl.exe cat --locate=\0\x35\0\x2E /%WinDir%/system32/version.dll
goto :NT5_BOOT
:NT6.HDD
echo -e Searching NT6.X on Hard Disk(/%WinDir%)
if exist file && root %~1 ! find --set-root --devices=h /%WinDir%/system32/winload.exe
goto :NT6_BOOT

:ISO_INST64
set ISO_TYPE=amd64
:ISO_INST
shift 1
::以下命令用于生成一个空白的软盘(fd0)
::echo > (md)0x200+2
::write --offset=0xb (md)0x200+3 \x00\x02\x01\x01\x00\x01\x70\x00\x10\x00\xfd\x01\x00\x08\x00\x01
::write 0x401FE 0xAA55
::write 0x40200 0xfffffe
::map --mem (md)0x200+2 (fd0)
map --status=0 || map --mem %NTBOOT%.IMG/EMPTY.IMG (0) && map --rehook
::转换到大写
set /u boot=%~1.IMG
set boot=%NTBOOT%.IMG/%boot%
::自动加载对应驱动的软盘镜像到(fd1)
map --mem %boot% (fd1) || call :Error Missing Module %boot%...
::如果用户指定了floppy的话将会由用户指定的镜像代替
set boot=cdrom
set ISO_INST=%~1
goto :%~1

::::AUTO_CONFIG::自动参数配置接口::::::::::::::::::::::::::::::::::::::::::::::::
::可以自动配置FIRADISK或VBOOT的启动参数,扩展后也可以设置其它参数。
::调用方法: call :AUTO_CONFIG VBOOT|FIRADISK [options...]
::其中options根据配置类型的不同而不同,但有一个参数是相同的boot
::注:除了boot和opt参数外其它的参数都应该是 type=FILE,例如cdrom=/cd/xp.iso或harddisk=(hd0,0)/test.img之类的
:AUTO_CONFIG
set ISO_INST=%~1
:AUTO_CONFIG_LOOP
shift
shift
::
::两个shift之后.%~0就是之前的%~2,%~1就是之前的%~3
::例子: call :AUTO_CONFIG VBOOT harddisk=/test/test.vhd
::没有shift之前%~0是:AUTO_CONFIG,两次shift就去掉了前面的两个参数,变成了harddisk.
::
if "%~1"=="" && exit
::如果参数是boot,则设置boot参数。
if /i "%~0"=="boot" && set boot=%~1 && goto :AUTO_CONFIG_LOOP
::如果参数是opt/addons,不调用文件查找检测功能
set file=%~1
if /i "%~0"=="opt" || if /i "%~0"=="addons" || if /i "%~0"=="e820" || call :AUTO_CONFIG_FILE
if /i "%~x1"==".iso" && call Fn.11 "%~n1" "64" && set ISO_TYPE=amd64 && echo -e %ISO_INST%: ISO_TYPE = amd64
::根据不同参数调用不同的函数,像FIRADISK.HARDDISK
echo -e %ISO_INST%: %~0=%file%
call :%ISO_INST%.%~0 %file%
::下一个参数
goto :AUTO_CONFIG_LOOP
:AUTO_CONFIG_FILE
command %NTBOOT%.CMD/EMPPATH file="%file%"
call :CHECK_FILE %file%
goto :eof

:WINVBLK
call :AUTO_CONFIG %*
goto :WINVBLK_BOOT

:WINVBLK.CDROM
map %~1 (0xCD) || map --mem %~1 (0xCD)
exit
:WINVBLK.FLOPPY
map --mem %~1 (fd0)
exit
:WINVBLK.HARDDISK
map %~1 (hd0) || map --heads=255 --sectors-per-track=63 %~1 (hd0)
map (hd0) (hd)
map --harddrives=1
exit

:FIRADISK.@HARDDISK
:WINVBLK.@HARDDISK
map --mem --heads=0 --sectors-per-track=0 %~1 (hd0)
map (hd0) (hd)
map --harddrives=1
exit
:FIRADISK.@CDROM
:WINVBLK.@CDROM
map --mem %~1 (0xCD)
exit

:FIRADISK.#HARDDISK
:WINVBLK.#HARDDISK
map --mem --top --heads=0 --sectors-per-track=0 %~1 (hd0)
map (hd0) (hd)
map --harddrives=1
exit
:FIRADISK.#CDROM
:WINVBLK.#CDROM
map --mem --top %~1 (0xCD)
exit


:FIRADISK
::使用内存地址0x40000开始处的10个扇区存放FIRADISK参数。
::echo -n > (md)0x210+1
set fira.opt=
call :AUTO_CONFIG %*
::如果内存地址0x40020的数值非0,则说明有写入了参数.
::read 0x40020 && map --mem (md)0x200+16 (99)
::echo -e \" >> (md)0x210+1
map --hook
if not exist fira.opt && goto :FIRADISK_BOOT
cat --locate=###### --number=1 (fd1)/%ISO_TYPE%/TXTSETUP.OEM > nul || call :error firadisk.img file error..
set offset=%?%
write --offset=%offset% (fd1)/%ISO_TYPE%/TXTSETUP.OEM value=Parameters,StartOptions,REG_SZ,"%fira.opt%"\r\n
cat --skip=%offset% --locate=/ --replace=\\ (fd1)/%ISO_TYPE%/TXTSETUP.OEM
goto :FIRADISK_BOOT

:FIRADISK_BOOT
:WINVBLK_BOOT
map --rehook
::保证(fd1)的位置靠后.详情:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=203313
call :SwapFloppy || echo -n
if exist BOOT && %BOOT%
if /i "%boot%"=="cdrom" && chainloader (0xCD) && boot
if /i "%boot%"=="harddisk" && chainloader (hd0)+1 && boot
if /i "%boot%"=="floppy" && chainloader (fd0)+1 && boot
exit

::软盘重排
: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.net/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

::FIRADISK 参数自动设置,可设置CDROM,FLOPPY,HARDDISK等参数
:FIRADISK.CDROM
::优先使用直接映射,失败再尝试内存映射。
set fira.opt=cdrom,vmem=find:%~pnx1;%fira.opt%
map %~1 (0xCD) || map --mem %~1 (0xCD)
exit
:FIRADISK.FLOPPY
map --mem %~1 (fd0)
exit
:FIRADISK.HARDDISK
map %~1 (hd0) || map --heads=255 --sectors-per-track=63 %~1 (hd0)
map (hd0) (hd)
set fira.opt=disk,vmem=find:%~pnx1;%fira.opt%
exit
:FIRADISK.OPT
set fira.opt=%~1;%fira.opt%
exit
::以上是FIRADISK 参数自动设置

:VBOOT
if not exist (0xfd)/vbootldr && map --mem %NTBOOT%.MOD/VBOOT.ISO (0xfd) || call :Error Missing Module VBOOT...
map --hook && echo VBOOT module loaded successfully.
echo -n vboot  > (0xfd)/vboot/grub/grub.cfg
if exist ISO_INST goto :VBOOT_INST
shift
::::::::::非ISO_INST是默认启动磁盘为harddisk::::::::::::::::::::
::::::::::调用AUTO_CONFIG来配置VBOOT的启动参数:::::::::::::::::
set boot=harddisk
call :AUTO_CONFIG vboot harddisk=%*
goto :VBOOT_BOOT
::使用VBOOT来安装系统,先映射VBOOT.IMG
:VBOOT_INST
call :AUTO_CONFIG %*
goto :VBOOT_BOOT

::::以下内容为VBOOT的启动参数自动配置:::::::不了解请不要改变,否则会启动失败::::::::
:VBOOT.CDROM
:VBOOT.HARDDISK
:VBOOT.FLOPPY
::VBOOT.TAKE_SNAPSHOT //
uuid ()
::VBOOT比较笨,必须小写。。
set /l UUID=%?%
set /l tmp=%~x0
echo -e -n %tmp:~1%=(UUID=%UUID%)"%~pnx1"  >> (0xfd)/vboot/grub/grub.cfg
exit
:VBOOT.OPT
echo -e -n %~1  >> (0xfd)/vboot/grub/grub.cfg
exit
::::以上内容为VBOOT的启动参数自动配置:::::::

:VBOOT_BOOT
echo -e boot=%boot%\nboot >> (0xfd)/vboot/grub/grub.cfg
if exist BOOT && %BOOT%
::map --unmap=11
::map --rehook
::call :SwapFloppy
kernel (0xfd)/vbootldr
boot
exit 90

:NT6.VHDX_BOOT
:NT6.VHD_BOOT
::固定用法,本软盘对应的BCD文件专用.下同
set boot_cfg=:BCD_CFG_VHD#WIM b VHD
goto :NT6_BOOT

:NT6.WIM_BOOT
set boot_cfg=:BCD_CFG_VHD#WIM a WIM
goto :NT6_BOOT

:NT5.IMG_BOOT
set boot_cfg=:NT5_RAM_CFG
goto :NT5_BOOT

::GET_ARC_PATH,把一个路径转换为ARC格式表示
:GET_ARC_PATH
checkrange 0:1 read 0x82a0 && goto :FD_ARC
::checkrange 0x9E:0xFF read 0x82a0 && goto :CD_ARC
:HD_ARC
DISKID ret=0x60000 || goto :CD_ARC
set /a R=*0x60000>>24&0xFF
set /a P=*0x60000>>16&0xFF
echo multi(0)disk(0)rdisk(%R%)partition(%P%)%tmp% > (md)0x3000+4
:SET_ARC_PATH
::替换GRUB4DOS路径的/为WINDOWS路径\
cat --locate=/ --replace=\\ (md)0x3000+4
::设置变量ARC_PATH
cat (md)0x3000+4 | set ARC_PATH=
goto :eof

:FD_ARC
set /a R=*0x82A0&0xFF
echo multi(0)disk(0)fdisk(%R%)%tmp% > (md)0x3000+4
::如果是(fdx,y)的形式,映射成(fdx)
checkrange 0xFFFFFF00 read 0x829b || map +1 ()
goto :SET_ARC_PATH

:CD_ARC
set /a R=*0x82A0&0xFF
echo multi(0)disk(0)cdrom(%R%)%tmp% > (md)0x3000+4
goto :SET_ARC_PATH

:NATIVE_CFG
echo cd ?:%~pnx1 > (rd)/NATIVE.CFG
cat --locate=/ --replace=\\ --length=256 (rd)/NATIVE.CFG
exit

:PE1_BOOT
######以下三行是提供给NATIVE核心的PE使用的######################
echo -e @echo off\r\ncd ?:%~p1\r\ncd ?:%~pnx1 > (rd)/NATIVE.CFG
################################################################
cat --locate=/ --replace=\\ --length=256 (rd)/NATIVE.CFG
if /i "%file%"=="%~x1" && set file=/boot/imgs/boot%~1
:PE1.OPTIONS
if /i "%~2"=="PDIR" && set PDIR=%~3
if /i "%~2"=="OPTIONS" && set option=%~3
if /i "%~2"=="NTPATH" && set NTPATH=%~3
if /i "%~2"=="Addons" && call :Addons %~3 pe
if /i "%~2"=="e820" && call :PE1.E820 %~3
shift 2
shift 2
if not "%~2"=="" goto :PE1.OPTIONS
command %NTBOOT%.CMD/EMPPATH file="%file%"
call :CHECK_FILE %file% %file:~0,-1%_
if not exist NTPATH && set NTPATH=%tmp%
call :NATIVE_CFG %NTPATH%
::如果是ISO格式就添加一个参数/rdexportascd
if /i "%tmp:~-3,2%"=="is" && set option=/rdexportascd %option%
if /i "%tmp:~-3%"=="wim" && set option=%option% /rdimageoffset=8192 /rdimagelength=3161088
call :GET_ARC_PATH
echo -e [SetupData]\r\nBootDevice="ramdisk(0)" > (rd)/BOOT.INI
echo BootPath=\%PDIR%\SYSTEM32\  >> (rd)/BOOT.INI
echo OsLoadOptions="/minint /fastdetect %option% /rdpath=%ARC_PATH%" >> (rd)/BOOT.INI
::消除多余的空字符,否则会启动失败
cat --locate=\0 --replace=; (rd)/BOOT.INI
::修改默认路径
if /i not %PDIR%=="I386" && write --offset=0x2A4FB (rd)/SETUPLDR.BIN %PDIR%
::修改默认WINNT.SIF文件名
write --offset=0x2a432 (rd)/SETUPLDR.BIN BOOT.INI\0
if /i "%DEBUG%"=="on" && cat (rd)/BOOT.INI && checkrange 0x11b pause --test-key && goto :exit
if exist BOOT && %BOOT%
map --mem (rd)+1 (0xfd)
::map --unmap=11
map --rehook
call :SwapFloppy || echo -n
chainloader (0xfd)/SETUPLDR.BIN
boot
exit

:BCD_CFG_VHD#WIM
::本软盘BCD对应的特定语句,修改默认启动项
write --offset=0x343C (rd)/BOOT/BCD %~1
write --offset=0x35DC (rd)/BOOT/BCD %~1
::未公开功能。把变量的值ASCII字符串使用UNICODE编码放到内存0x40000位置。编码方式\xH1\0\XH2\0.....
WENV get tmp=0x40000
::替换路径字符中的/为\
cat --locate=\\x2F --replace=\\x5C (md)0x200+3
::本软盘BCD对应的特定语句,修改文件路径
cat --locate=\\%~2_ --number=2 (rd)/BOOT/BCD | call :BCD_CFG_PATH=
exit

:BCD_CFG_PATH
WENV call write --offset=0x%~1 (rd)/BOOT/BCD *0x40000$
WENV call write --offset=0x%~2 (rd)/BOOT/BCD *0x40000$
exit

:NT5_RAM_CFG
set default=ramdisk(0)/%WinDir%
echo %default%="ramdisk" #fastdetect #noguiboot %opt% #rdpath=%ARC_PATH% >> (rd)/BOOT.INI
exit

:NT5_HDD_CFG
set default=%ARC_PATH%
echo %default%="NT5" #fastdetect %opt% #NoExecute=AlwaysOff #PAE  >> (rd)/BOOT.INI
exit

:NT5_BOOT
set /a cur_drv=*0x82A0&0x7F
set /a cur_pri=*0x829C>>16&0xFFFF
clear
echo
echo -e $[0105]  Will Boot NT5.X From $[0102](hd%cur_drv%,%cur_pri%)$[0106]%tmp%
echo
echo -e $[0101]  Press $[1103]Esc$[0101] to quit!
checkrange 0x11b pause --wait=3 --test-key && goto :exit
call :GET_ARC_PATH
shift 1
set opt=%*
echo [operating systems] > (rd)/BOOT.INI
if exist boot_cfg && call %boot_cfg% ! call :NT5_HDD_CFG
echo [boot loader] >> (rd)/BOOT.INI
echo timeout=0 >> (rd)/BOOT.INI
echo default=%default% >> (rd)/BOOT.INI
::替换GRUB4DOS格式路径的\为/
cat --locate=/ --replace=\\ (rd)/BOOT.INI
::替换参数,前面写入的参数中的/都是使用#代替的。
cat --locate=# --replace=/ (rd)/BOOT.INI
::消除空字符(替换为;)
cat --locate=\0 --replace=; (rd)/BOOT.INI
if /i "%DEBUG%"=="on" && cat (rd)/BOOT.INI && checkrange 0x11b pause --test-key && goto :exit
if exist BOOT && %BOOT%
map --mem (rd)+1 (0xfd)
::map --unmap=11
map --rehook
chainloader (0xfd)/NTLDR
boot
exit

:NT6_NO_CONFIG
set /a offset=0x%~1+0x14
write --offset=%offset% (rd)/BOOT/BCD \0
exit

:BOOTMGR
set TMP_ROOT=%@root%
cat --length=0 %~1 > nul && root %~d1 > nul ! cat --length=0 %~pnx1 > nul && echo -n ! find --set-root cat --length=0 %~pnx1 > nul || exit
FAT del (rd)/BOOTMGR > nul || echo -n
FAT copy /o %@root%%%~pnx1 (rd)/BOOTMGR > nul || echo -n
root %TMP_ROOT% > nul
set TMP_ROOT=
exit

:NT6_BOOT
::附加参数
if /i "%~2"=="NODETECTHAL" && cat --locate=26000010 (rd)/BOOT/BCD | call :NT6_NO_CONFIG= && shift 2 && goto :NT6_BOOT
if /i "%~2"=="BOOTMGR" && call :BOOTMGR %~f3 && shift 2 && shift 2 && goto :NT6_BOOT
::shift 2
::if not "%~2"=="" goto :PE1.OPTIONS
::获取当前磁盘号
set /a cur_drv=*0x82A0&0x7F
set /a cur_pri=*0x829C>>16&0xFFFF
clear
echo
echo -e $[0105]  Will Boot NT6.X From $[0102](hd%cur_drv%,%cur_pri%)$[0106]%tmp%
echo
echo -e $[0101]  Press $[1103]Esc$[0101] to quit!
checkrange 0x11b pause --wait=3 --test-key && goto :exit
if exist boot_cfg && call %boot_cfg%

::获取MBR签名
dd if=(hd%cur_drv%)+1 of=(md) bs=1 count=4 skip=0x1b8 seek=0x60000
::获取当前分区偏移
cat --length=0 ()-1
dd if=(md) of=(md) bs=1 count=8 skip=0x8290 seek=0x60004
::修改MBR签名
cat --locate=\x53\xB7\x53\xB7 --replace=*0x60000 --hex=4 (rd)/BOOT/BCD
cat --locate=\0\x7E\0\0 --replace=*0x60004 --hex=8 (rd)/BOOT/BCD
if /i not "%WinDir%"=="windows" && call :CHG_NT6_WINDIR
if /i "%DEBUG%"=="on" && call :NT6_DEBUG
if exist BOOT && %BOOT%
map --mem (rd) (fd0)
::map --unmap=11
map --rehook
if exist ()/boot/slic.bin || find --set-root /boot/slic.bin || echo -n
if exist ()/boot/slic.bin && SLIC ()/boot/slic.bin
root (0)
chainloader (fd0)/BOOTMGR
boot
exit

:NT6_DEBUG
find --set-root --devices=h /ntboot_bcd || call :error DEBUG: Missing file /ntboot_bcd.
dd if=(rd)/BOOT/BCD of=()/ntboot_bcd
exit

:CHG_NT6_WINDIR
::以下都是测试,替换BCD里面WINDOWS目录,我自己也没有用过不知能否正常使用。
WENV get WinDir=0x60000
WENV call write --offset=0x3F76 (rd)/BOOT/BCD *0x60000$
set tmp=%WinDir%\system32\winload.exe
WENV get tmp=0x60000
WENV call write --offset=0x39A6 (rd)/BOOT/BCD *0x60000$
exit

:error
pause Error: %*
:exit
root %NTBOOT%
root ()
exit 1

:FIRADISK.Addons
:WINVBLK.Addons
:VBOOT.Addons
:Addons
setlocal
set addons=%*
call Fn.11 "(/" "%addons:~0,1%" || set addons=%NTBOOT%.MOD/%addons%
%addons% || echo -n
endlocal
exit

:NTBOOT_HELP
echo
echo Usage:
echo $[0102]        NTBOOT $[0107]NT5$[0105]|$[0107]NT6$[0105][=$[0107]root$[0105]|$[0107]file$[0105]]
echo
echo $[0102]        NTBOOT $[0105]PE1=file [PDIR=pdir] [OPTIONS=options] [ADDONS=cmd]
echo
echo $[0102]        NTBOOT $[0105]VBOOT=file [options...]
echo
echo $[0102]        NTBOOT $[0105]E820=N [options...]
echo
echo $[0102]        NTBOOT $[0107]ISO_INST$[0105]|$[0107]ISO_INST64$[0105]=[$[0107]firadisk$[0105]|$[0107]vboot$[0105]|$[0107]winvblk$[0105]] $[0106][options...]
echo $[0106]        options: [[@]CDROM=iso_file] [FLOPPY=srs_img] [[@]HARDDISK=hdd_img]
echo $[0106]                        [BOOT=cdrom|floppy|harddisk] [ADDONS=cmd] [...]
echo $[0106]                 "@" will map image to RAM(used for firadisk/winvblk only).
echo $[0106]                 "#" will map image to top of RAM(firadisk/winvblk only).
echo
pause > nul
exit 2

点评

您公布的这个是chenall在 2013-07-22发布的ntboot的源代码吗,还请作个说明,谢谢!  详情 回复 发表于 2014-8-17 09:36
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 06:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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