|
算了,U启难度太大,不搞了。在我的机器上,总是写入错误。在另一台机器上U启备份正常,恢复却不正常,怪事,参数都差不多啊。
onekey.lst内容:
debug 0
terminal console
default 0
timeout 0
title
set path=/onekey/
:: 设定程序目录,最后的/不能少。
set t=50
:: 设定延时,单位是秒
set p1=""
:: 强行设定备份恢复对象,如1:1,要自动判断备份恢复对象此处设为p1=""。
set p2=/C_BAK.GHO
:: 设定GRUB4DOS格式的备份文件位置及名称,如果放置于子目录,必须事先创建。
set p3=
:: 设定OMNIFS格式的硬盘读写参数,如果无法备份或备份速度极慢,参数设定为p3=/noide再试。
set p4=(hd0,4)
:: 设定备份文件放置的分区,可以是(hdx,y)形式或endpart,此处如设为p4="",映像文件放置于程序所在分区。
set BACKUP=-z1 -sure -rb
:: 设定备份参数
set RESTORE=:1 -fx -sure -rb
:: 设定恢复参数
find --set-root %path%onekey.ima
%path%check.bat
check.bat 内容:
!BAT
checkrange 0x0 read 0x8280 && goto :fd
checkrange 0x80 read 0x8280 && goto :hd
checkrange 0x23 read 0x8280 && goto :ud
goto :cd
:ud
calc *0x82b8>>8&0xff-0x80 && goto :fd
calc *0x82b8>>8&0xff-0x80 || goto :hd
:hd
find --set-root %path%onekey.ima
map --mem %path%onekey.ima (fd0)
map --hook
find --set-root makeactive --status
if exist ()/windows/system32/version.dll goto :ms
if exist ()/winnt/system32/version.dll goto :ms
#由于无法区分硬盘启动和USB-HDD启动,硬盘激活分区无WINDOWS系统的和USB-HDD相同处理
map (hd1) (hd0) && map (hd0) (hd1) && map --hook
find --set-root makeactive --status
if exist ()/windows/system32/version.dll goto :ms
if exist ()/winnt/system32/version.dll goto :ms
goto :noms
:fd
find --set-root %path%onekey.ima
map --mem %path%onekey.ima (fd1)
map --hook
map (fd0) (fd1)
map (fd1) (fd0)
map --hook
find --set-root makeactive --status
if exist ()/windows/system32/version.dll goto :ms
if exist ()/winnt/system32/version.dll goto :ms
:cd
find --set-root %path%onekey.ima
map --mem %path%onekey.ima (fd0)
map --hook
find --set-root makeactive --status
if exist ()/windows/system32/version.dll goto :ms
if exist ()/winnt/system32/version.dll goto :ms
goto :noms
#################################################
:ms
map --mem ()/windows/system32/version.dll (rd) || map --mem ()/winnt/system32/version.dll (rd)
calc *0x82d0=*0x82d0+*0x82d8-0x800
calc *0x82d8=0x800
cat --locate=\0\0\x44\0\0\0 --number=1 (rd)+1 | set skip=
set /a skip=0x%skip%-0x30
cat --locate=\0\0\0 --skip=%skip% --number=1 (rd)+1 | set skip=
calc *0x82d0=*0x82d0+0x%skip%+3
call Fn.67 *0x82d0 0x60000 3
cat (md)0x300+1,1 | set nt_ver=NT
cat (md)0x300+1,3 | goto :_
:noms
set sys_ver=Unknown System
goto :disp
exit
:_5.0
set sys_ver=Windows 2000
goto :disp
exit
:_5.1
set sys_ver=Windows XP
goto :disp
exit
:_5.2
set sys_ver=Windows 2003
goto :disp
exit
:_6.1
set sys_ver=Windows 7/2008
goto :disp
exit
:_6.2
set sys_ver=Windows 8
goto :disp
exit
:disp
set sys_hd=%@root%
clear
##############################################
(fd0)/grub/set.bat
set.bat内容:
!BAT
insmod %~dp0diskid
insmod %~dp0unifont
insmod %~dp0vfont
terminal console
diskid
cat --skip=0x4ff00 (md)+0x300 | set p5=
if %p1%=="" set p1=%p5%
:: 自动设定备份恢复对象
set ps=cmd="echo %1" filpre="" ext=.gho dirext=1 subdir=2 devs="--devices=h" return="reboot" p1=%p1%
:: 设定搜索批处理运行参数
if %p4%=="" find --set-root %path%onekey.ima
if not %p4%=="" root %p4%
set pg=%@root%
diskid
cat --skip=0x4ff00 (md)+0x300 | set diskid=
echo %diskid% > (md)0x200+1
cat --locate=\: --replace=\. (md)0x200+1
cat (md)0x200+1 | set diskid=
ls %p2% && cat --length=0 %p2% || set gho=1
ls %p2% && cat --length=0 %p2% && set gho=2
ls %p2% || set gho=0
:: 判断备份文件是否为0字节(备份过程断电或强行中断造成),0为无备份文件, 1为存在0字节备份文件, 2为存在正常的备份文件。
clear
%~dp0show.bat
show.bat 内容:
!BAT
vfont %~dp0show.exe
echo
diskid
cat --skip=0x4ff00 (md)+0x300 | set diskid=
if %diskid%==%p1% && echo -P:1208 $[1104]Error: $[0106]Program can not be placed in the partition to be backed up. && pause --wait=%t%
if %diskid%==%p1% && goto Default
echo -P:1115 $[0102]系统位置: $[0106]%p5% %sys_hd% $[0102]系统类型: $[0106]%sys_ver%
echo -P:1215 $[0102]备份恢复: $[0106]%p1% $[0102]GHO 位置: $[0106]%pg%%%p2%
if %gho%==1 echo -P:1422 $[0105]备份文件错误 $[0106]!!!$[0105] $[0105] 按 $[1106]Alt+B$[0105] 重新备份系统
if %gho%==0 echo -P:1424 $[0105]系统备份不存在$[0106]!!!$[0105] 按 $[1106]Alt+B$[0105] 备份系统
if %gho%==2 echo -P:1432 $[0105]恢复系统按 $[1106]F10
echo -P:2225 $[0102]系统备份 恢复 维护 $[0103]%@DATE%
echo -P:04-28 $[0101]Alt+B $[0107]备份系统
echo -P:05-28 $[0102]Alt+0 $[0107]0PE 维护
echo -P:06-28 $[0103]Alt+D $[0107]启动 DOS
echo -P:07-28 $[0104]Alt+C $[0107]G4D命令行
echo -P:08-28 $[0105]Alt+S $[0107]搜索.GHO
%~dp0do.bat
do.bat内容:
!BAT
!BAT
echo %diskid% > (md)0x200+1
cat --locate=\: --replace=\. (md)0x200+1
cat (md)0x200+1 | set diskid=
set key=
pause --test-key --wait=%t%
set /A key=*0x4CB00
vfont
if %key%==0x4400 goto 0x4400
if %key%==0x3000 goto 0x3000
if %key%==0x8100 goto 0x8100
if %key%==0x2000 goto 0x2000
if %key%==0x2E00 goto 0x2E00
if %key%==0x1F00 goto 0x1F00
:Default
#引导硬盘默认系统
clear
find --set-root makeactive --status
chainloader +1
exit
:0x4400 F10
#恢复系统
clear
if not exist %p2% reboot
#如果系统备份不存在,重新启动
write --offset=16 (fd0)/autoexec.bat %p1%\r\n
write --offset=31 (fd0)/autoexec.bat %diskid%\r\n
write --offset=46 (fd0)/autoexec.bat pload
write --offset=59 (fd0)/autoexec.bat %p3%\r\n
write --offset=167 (fd0)/autoexec.bat %p3%\r\n
write --offset=275 (fd0)/autoexec.bat %p2%\r\n
write --offset=383 (fd0)/autoexec.bat %RESTORE%\r\n
cat --skip=275 --locate=\/ --replace=\\ (fd0)/autoexec.bat
cat --skip=167 --locate=\/ --replace=\- (fd0)/autoexec.bat
chainloader (fd0)/io.sys
exit
:0x3000 Alt+B
#备份系统
clear
if %gho%==2 password --md5 $1$om70$FkKbNfOBf72FrRSqrj34E1
#系统备份已存在时,要求输入密码,当前密码为:123456
write --offset=16 (fd0)/autoexec.bat %p1%\r\n
write --offset=31 (fd0)/autoexec.bat %diskid%\r\n
write --offset=46 (fd0)/autoexec.bat pdump
write --offset=59 (fd0)/autoexec.bat %p3%\r\n
write --offset=167 (fd0)/autoexec.bat %p3%\r\n
write --offset=275 (fd0)/autoexec.bat %p2%\r\n
write --offset=383 (fd0)/autoexec.bat %BACKUP%\r\n
cat --skip=275 --locate=\/ --replace=\\ (fd0)/autoexec.bat
cat --skip=167 --locate=\/ --replace=\- (fd0)/autoexec.bat
chainloader (fd0)/io.sys
exit
:0x8100 Alt+0
#引导0PE进行系统维护
clear
find --set-root /0pe/0pe.iso
map /0pe/0pe.iso (0xFF) || map --mem /0pe/0pe.iso (0xFF)
map --hook
chainloader (0xFF)
exit
:0x2000 Alt+D
#进入DOS
clear
write --offset=46 (fd0)/autoexec.bat todos
chainloader (fd0)/io.sys
exit
:0x2E00 Alt+C
#进入GRUB4DOS命令行
clear
commandline
exit
:0x1F00 Alt+S
#显示分区信息和搜索硬盘上的GHO文件
clear
write --offset=16 (fd0)/autoexec.bat %p1%\r\n
write --offset=46 (fd0)/autoexec.bat pload
write --offset=59 (fd0)/autoexec.bat %p3%\r\n
write --offset=167 (fd0)/autoexec.bat %p3%\r\n
write --offset=383 (fd0)/autoexec.bat %RESTORE%\r\n
%~dp0searth.bat %ps%
exit
[ 本帖最后由 mygamexxx 于 2011-9-27 16:18 编辑 ] |
|