NT6硬盘安装器 原理 源码.docx
《NT6硬盘安装器 原理 源码.docx》由会员分享,可在线阅读,更多相关《NT6硬盘安装器 原理 源码.docx(15页珍藏版)》请在冰豆网上搜索。
NT6硬盘安装器原理源码
NT6硬盘安装器原理+源码.txt其实全世界最幸福的童话,不过是一起度过柴米油盐的岁月。
一个人愿意等待,另一个人才愿意出现。
感情有时候只是一个人的事,和任何人无关。
爱,或者不爱,只能自行了断。
+------------------------------------------------------------------------------------+
|以下为模式1原理,也是网络上最早的利用grub4dos来安装vista,2008,win7,2008r2的教程|
+------------------------------------------------------------------------------------+
程序基于GRUB4DOS,对于系统引导一向不推荐第三方软件,对于大名鼎鼎的GRUB4DOS是个例外,也因为GRUB4DOS的强大引导功能,所以有了这个程序。
注:
2000/XP/2003下面全称XP,没有32位/64位之分;vista/2008/win7下面全称vista,也没有32位/64位之分,文中提及的C盘严格来说为硬盘的活动分区,为方便全部称C盘,活动分区盘符有特殊情况的自己对号入座。
对于没刻录机的朋友,硬盘安装系统是一个必谈话题,不过一些简单的安装方法就不再谈了:
如在原32位XP/VISTA上装32位VISTA、64位XP/VISTA上装64位VISTA,有相应的PE系统直接安装同位的VISTA系统。
这些都可以直接安装。
本方法针对的对象是32位XP/VISTA需装64位VISTA或者64位XP/VISTA需装32位VISTA的情况。
有刻录机的朋友也可以用这个方法省一张光盘,基于VISTA光盘引导安装和WINDOWS中SETUP安装会产生不同的盘符结果,需要实现光盘安装盘符结构的朋友也可以不刻盘使用这个方法。
本方法优点:
一、安全:
由于使用的是添加引导项而不是旧方法的修改引导项的方法,所以就算少数的机器不兼容grub4dos而无法进入安装界面,也不影响进入原系统。
二、通用:
本方法对原系统是XP或VISTA都可以,并且原系统和要新装的系统没有32位或64位的限制。
三、方便:
提取ISO中的安装文件只一次提取至同一位置,而无需分位置提取。
WIN7安装特别提示:
WIN7在安装过程和安装结果相对VISTA和WIN2008有不少改进。
如果用本方法安装WIN7,下面两种情况一样,第二步重启系统进VistaHardDiskInstaller后,无需进“修复计算机”和“命令提示符”,直接开始安装,全部过程和光盘一样直接安装,当然同样不推荐装在安装程序所在分区。
注:
本文采用的是MSDN版的VISTA安装盘ISO,OEM原版(如果带有修复计算机选项的也可以)或修改版(太杂太乱)不在本方法之内。
注:
MSDN版体积小/功能全/在OEM机器上安装后导入证书和更换密匙(或安装过程中输入)后的激活和相应OEM激活结果一样,所以我只备MSDN。
*************************************
废话说了不少,现在正文开始:
*************************************
前期准备:
下载MSDN的VISTA光盘映像ISO,用虚拟光驱加载后复制或UltraISO解压至硬盘一非系统分区(不推荐放在要用来装VISTA的分区中),注意是复制或解压至该分区根目录下,而不是某一文件夹下。
解压/复制后包括三个文件(bootmgr、setup.exe、autorun.inf),五个文件夹(boot、efi、sources、support、upgrade),这里给出,以方便完成安装后根据需要删除这些安装文件
下载附件至桌面,winrar解压至当前文件夹后在vistahddinstaller文件夹里有三个文件:
zchzr.mbr、zchzr(这两个是我修改的基于GRUB4DOS的核心文件)、boot.ini(供下面情况二使用)
注:
只讨论原系统是单系统的情况,多系统的情况太多,不一一给出,有特殊情况的朋友可以跟贴给出相应的安装方法
情况一:
当前系统XP
一、把附件中的zchzr.mbr、zchzr剪切至C盘根文件夹下。
再“我的电脑”右键》属性》高级》第三个“设置”》编辑》最后多加一行C:
\zchzr.mbr="VistaHardDiskInstaller"
PS:
最后一行字符可以打开附件中的boot.ini后复制/粘贴。
二、重启系统,正常多出一个VistaHardDiskInstaller的选择菜单,选择进入,不选择开始安装,选择左下角的“修复计算机”,再选择“命令提示符”,本例在前期准备中安装程序放在E盘,所以:
e:
cd\sources
setup
三、剩下的操作就和光盘安装完全一样,如果需要格式化安装所在分区,不能装在存放安装文件的E盘上,装在其它分区上成双系统、格式化C盘结果为VISTA单系统就全部由你自己决定了。
安装完成后如果是装成多系统的话再修改相应的boot.ini(第一步)回原样,删除zchzr和zchzr.mbr。
情况二:
当前系统VISTA。
(单vista系统默认C盘不存在boot.ini文件)
一、把附件中的zchzr.mbr、zchzr、boot.ini剪切至C盘根文件夹下
注:
这里一样要注意系统属性中高级设置的启动列表等待时间,方法就不述了。
二、重启系统,正常多出一个VistaHardDiskInstaller的选择菜单,选择进入,不选择开始安装,选择左下角的“修复计算机”,这里如果提示修复启动项,请选择“否”,搜索硬盘系统后出现已安装VISTA的话也点中间空白处,使出现的旧系统栏不要变成蓝色,跟着一样再选择“命令提示符”,本例在前期准备中安装程序放在E盘,所以:
e:
cd\sources
setup
三、剩下的操作就和光盘安装完全一样,如果需要格式化安装所在分区,不能装在存放安装文件的E盘上,装在其它分区上成双系统、格式化C盘结果为VISTA单系统就全部由你自己决定了。
安装完成后如果是装成多系统的话删除C盘的zchzr、zchzr.mbr、boot.ini
+--------------------+
|以下为模式2原理|
+--------------------+
模式1的原理很早就已经介绍过了(
当前系统为VISTA/2008/WIN7/2008R2时,安装程序在E盘根目录为例
利用BCDEDIT为E盘的安装程序添加一个启动菜单就可以了.下面是实现批处理
setvhiuid1={66666666-fa0f-11da-8ddf-001320035401}
setvhiuid2={77777777-fa0f-11da-8ddf-001320035401}
bcdedit/create%vhiuid1%/d"nt6hddInstallermode2"/device>nul
bcdedit/set%vhiuid1%ramdisksdidevicepartition=e:
>nul
bcdedit/set%vhiuid1%ramdisksdipath\boot\boot.sdi>nul
bcdedit/create%vhiuid2%/d"nt6hddInstallermode2[EMSEnable]"/applicationosloader>nul
bcdedit/set%vhiuid2%deviceramdisk=[e:
]\sources\boot.wim,%vhiuid1%>nul
bcdedit/set%vhiuid2%path\windows\system32\boot\winload.exe>nul
bcdedit/set%vhiuid2%localeen-US>nul
bcdedit/set%vhiuid2%osdeviceramdisk=[e:
]\sources\boot.wim,%vhiuid1%>nul
bcdedit/set%vhiuid2%systemroot\windows>nul
bcdedit/set%vhiuid2%detecthalYes>nul
bcdedit/set%vhiuid2%winpeYes>nul
bcdedit/set%vhiuid2%emsYes>nul
bcdedit/displayorder%vhiuid2%/addlast>nul
pause
这个批处理右击执行后就可以添加mode2的启动菜单,重启调用e盘上的系统安装程序并进入安装界面,也从多次的试验上证明低版本的bootmgr文件可以调用高版本的系统安装程序.所以无需替换bootmgr等操作.其实原理非常简单,只是之前大家没想到而已,想到了并说明了就没什么特别之处了.
如果当前系统是2000/xp/2003,添加mode2的手工操作相对繁琐一些,这里就不介绍了,不过玩多系统的朋友应该一看就明白.
集成做为一个工具发布,只是为不同的朋友不同的系统情况作出不同的操作
+---------------------------+
|以下为v2.6的源程序代码|
+---------------------------+
鉴于有朋友要看源码,一段批处理而已,v2.6的源码,写得不好,见笑了.
rem>nul
cls
@echooff
modeconcols=80lines=25
setlocalenabledelayedexpansion
color1f
chcp936>nul
if!
errorlevel!
equ0gotostart
chcp950>nul
if!
errorlevel!
equ0gotostart
if%windir:
~0,2%equX:
gotostart
cls
echo.
echoPleaseChangeyourSystemNon-Unicodeto[SimplifiedChinese]
echo.
echoor[TraditionalChinese]
echo.
echoPressanykeytoContinue......
pause>nul
:
start
chcp950>nul
if!
errorlevel!
gtr0(
chcp936
setline1=╭─────────────────────────────────────╮
setline2=││
setline3=╰─────────────────────────────────────╯
setmsg1=安装/卸载程序
setmsg2=当前系统:
Vista/2008/Win7,推荐使用模式2
setmsg3=错误!
!
!
请关闭UAC或右击本程序后以管理员身份运行,按键退出......
setmsg4=按键返回主界面......
setmsg5=│[1]安装nt6hddInstaller模式1:
当前系统为2000/xp/2003时推荐使用│
setmsg5_1=│[2]安装nt6hddInstaller模式2:
当前系统为vista/2008/7/PE时推荐使用│
setmsg6=│[3]卸载nt6hddInstaller模式1和模式2│
setmsg6_a=│[4]退出│
setmsg6_0=│安装前请确认已经把vista/2008/win7安装程序提取/解压至本地硬盘某分区根目录│
setmsg6_1=模式说明:
可以选择安装其中一种或两种模式同时安装
setmsg7=请选择要进行的操作[1/2/3/4],然后按回车:
setmsg10=当前系统:
2000/XP/2003,推荐使用模式1
setmsg11=当前系统:
WinPE,暂只能使用模式2
setmsg12=错误:
未知原因找不到启动菜单配置文件boot.ini,启动菜单未添加
setmsg13=模式1安装完成
setmsg13_1=模式2安装完成
setmsg14=重启选择nt6hddInstallermode1进行系统安装
setmsg14_1=重启选择nt6hddInstallermode2[EMSEnable]进行系统安装
setmsg16=本操作将同时卸载nt6hddInstaller模式1和模式2
setmsg18=卸载完成,
setmsg19=系统BCD存在错误,无法添加启动菜单,使用BCDautofix^(v1.0.3或更高版本^)进行修复
setmsg20=BCD后再次尝试安装或使用原始方法^(VistaHDDInstaller^),按键退出...
setmsg24=PE系统中暂不支持安装模式1,如有特别需要,请安装模式2,
setmsg25=错误:
在所有有效盘符中没发现Vista/2008/Win7安装程序,请将Vista/2008/Win7安
setmsg26=装程序提取至本地硬盘某分区根目录后再次安装模式2
setmsg27=上发现Vista/2008/Win7安装程序
setmsg28=模式2未知原因安装失败!
!
!
)else(
chcp950
setline1=ⅰ
setline2=
setline3=ⅱⅲ
setmsg1=杆/更祘
setmsg2=讽玡╰参Vista/2008/Win7崩ㄏノ家Α2
setmsg3=岿粇叫闽超UAC┪阑セ祘╰参恨瞶ō笲︽龄癶......
setmsg4=龄......
setmsg5=[1]杆nt6hddInstaller家Α1:
讽玡╰参2000/xp/2003崩ㄏノ
setmsg5_1=[2]杆nt6hddInstaller家Α2:
讽玡╰参vista/2008/7/PE崩ㄏノ
setmsg6=[3]更nt6hddInstaller家Α1㎝家Α2
setmsg6_a=[4]癶
setmsg6_0=杆玡叫絋粄竒рvista/2008/win7杆祘Α矗/秆溃セ祑絃琘だ跋ヘ魁
setmsg6_1=家Α弧:
匡拒杆ㄤい贺┪ㄢ贺家Α杆
setmsg7=叫匡拒璶秈︽巨[1/2/3/4]礛ó
setmsg10=讽玡╰参2000/XP/2003崩ㄏノ家Α1
setmsg11=讽玡╰参WinPE既ㄏノ家Α2
setmsg12=岿粇:
ゼтぃ秨诀垫虫皌竚ゅンboot.ini秨诀垫虫ゼ睰
setmsg13=家Α1杆ЧΘ
setmsg13_1=家Α2杆ЧΘ
setmsg14=币匡拒nt6hddInstallermode1秈︽╰参杆
setmsg14_1=币匡拒nt6hddInstallermode2[EMSEnable]秈︽╰参杆
setmsg16=セ巨盢更nt6hddInstaller家Α1㎝家Α2
setmsg18=更ЧΘ
setmsg19=╰参BCD岿粇礚猭睰秨诀垫虫ㄏノBCDautofix^(v1.0.3┪蔼セ^)秈︽蝋
setmsg20=BCDΩ沽刚杆┪ㄏノ﹍よ猭^(VistaHDDInstaller^)龄癶...
setmsg24=PE╰参い既ぃや杆家Α1Τ疭惠璶叫杆家Α2
setmsg25=岿粇┮ΤΤ絃才い⊿祇瞷Vista/2008/Win7杆祘叫盢Vista/2008/Win7
setmsg26=杆祘矗セ祑絃琘だ跋ヘ魁Ω杆家Α2
setmsg27=祇瞷Vista/2008/Win7杆祘
setmsg28=家Α2ゼ杆ア毖
)
cls
titlent6hddInstallerv2.6!
msg1!
bychzhlh
echo.
if%windir:
~0,2%equX:
(
ifexistc:
\boot\bcd(
be>nul
if!
errorlevel!
gtr0echo!
msg19!
&echo.&echo!
msg20!
&echo.&pause>nul&exit)
set/awver=0
setdriverall=C:
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
Y:
Z:
setmsg100=!
msg11!
)else(
ifexist%windir%\system32\slmgr.vbs(
ifexistnt6hdd.temp.*attrib-r-h-snt6hdd.temp.*>nul&delnt6hdd.temp.*>nul
be/createstorent6hdd.temp>nul
if!
errorlevel!
gtr0echo!
msg2!
&echo.&echo!
msg3!
&pause>nul&exit
set/awver=6
setdriverall=A:
B:
C:
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z:
setmsg100=!
msg2!
be>nul
if!
errorlevel!
gtr0echo!
msg19!
&echo.&echo!
msg20!
&echo.&pause>nul&exit
)else(
ifexistc:
\boot\bcd(
be>nul
if!
errorlevel!
gtr0echo!
msg19!
&echo.&echo!
msg20!
&echo.&pause>nul&exit)
set/awver=5
setdriverall=C:
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z:
setmsg100=!
msg10!
)
)
setvhiuid={66666666-fa0f-11da-8ddf-001320035401}
setvhiuid1={77777777-fa0f-11da-8ddf-001320035401}
setvhiuid2={88888888-fa0f-11da-8ddf-001320035401}
:
begin
cls
echo!
line1!
echo!
msg6_0!
echo!
line3!
echo.
echo!
msg6_1!
echo.
echo!
line1!
echo!
msg5!
echo!
line2!
echo!
msg5_1!
echo!
line2!
echo!
msg6!
echo!
line2!
echo!
msg6_a!
echo!
line3!
echo.
setcoi=
setcoi1=
echo!
msg100!
echo.
Set/Pcoi=!
msg7!
setcoi1=%Coi:
~0,1%
if/i"!
coi1!
"=="1"gotoinstall
if/i"!
coi1!
"=="2"gotoinstall2
if/i"!
coi1!
"=="3"gotouninstall
if/i"!
coi1!
"=="4"gotoquitt
gotobegin
:
install
echo.
if!
wver!
equ0(
echo!
msg24!
!
msg4!
pause>nul
gotobegin
)
if!
wver!
equ6(
ifnotexistc:
\zchzrxcopy/yzchzrc:
\>nul
ifnotexistc:
\zchzr.mbrxcopy/yzchzr.mbrc:
\>nul
be/create%vhiuid%/d"nt6hddInstallermode1"/applicationbootsector>nul
be/set%vhiuid%devicepartition=c:
>nul
be/set%vhiuid%path\zchzr.mbr>nul
be/displayorder%vhiuid%/addlast>nul
be/timeout8>nul
)
if!
wver!
equ5(
ifnotexistc:
\boot.iniecho!
msg12!
&echo.&echo!
msg4!
&pause>nul&gotobegin
ifnotexistc:
\zchzrxcopy/yzchzrc:
\>nul
ifnotexistc:
\zchzr.mbrxcopy/yzchzr.mbrc:
\>nul
typec:
\boot.ini|find"zchzr.mbr"/i>nul
if!
errorlevel!
gtr0(
attrib-h-r-sc:
\boot.ini>nul
copy/yc:
\boot.ini%temp%\boot.ini.vhi>nul
echo[bootloader]>c:
\boot.ini
echotimeout=8>>c:
\boot.ini
type%temp%\boot.ini.vhi|find"loader]"/i/v|find"timeout"/i/v|find";"/i/v>>c:
\boot.ini
echoc:
\zchzr.mbr="nt6hddInstallermode1">>c:
\boot.ini
attrib+s+hc:
\boot.ini>nul
)
)
attrib+r+h+sc:
\zchzr.*
echo======================================================================
echo.
echont6hddInstaller!
msg13!
echo.
echo!
msg14!
echo.
echo!
msg4!
&pause>nul&gotobegin
:
install2
echo.
set