无忧启动论坛

标题: 总结一下bootmgr的引导模式(菜鸟学习BOOTMGR BCD修改,感谢各位大虾的真知灼见) [打印本页]

作者: yishuihan945    时间: 2012-8-20 21:42
标题: 总结一下bootmgr的引导模式(菜鸟学习BOOTMGR BCD修改,感谢各位大虾的真知灼见)
总结一下bootmgr的引导模式(引导dos,nt5,nt6,grub4dos等)作者: wingwy 发表于:2011年01月15日 17,815 次浏览, 52 条评论 »
bootmgr和grub4dos都是很好启动管理器,两者都能相互调用,功能互相补充。grub4dos很强大,讲怎么用它引导的文章已经很多了,这里就不讨论了。下面讲一下通过bcdedit编辑bcd文件来实现bootmgr引导dos,nt5(xp/xpe包括winpe1.X版本),nt6(vista/2008/win7包括winpe2.0及以后的版本,wim和vhd文件),和grub4dos(以及linux和iso文件)等。google了一下,网上似乎没有较全面的应用文章,这里总结一下常用的几种,方便初学的网友,都是很基础的东西。
以用bootmgr为主引导程序的启动光盘为例,假设在C:\Downloads\pe\dvd目录,此目录下必须有bootmgr程序和boot文件夹及font文件,要想显示中文,需要还需要mui文件,设置bcd文件路径
set bcd_path= C:\Downloads\pe\dvd\BOOT\bcd
1 bootmgr引导dos启动盘
bootmgr不能直接引导dos启动盘,必须借助于bootsector模式通过其他的途径来解决。比如,要引导\boot\dos.img 文件,我们可以借助easyboot,新建一个菜单,命令为run dos.img。这样在easyboot的ezboot文件夹下会生成2个文件,一个2048字节大小loader.bin文件,一个cdmenu.ezb的文件。将此两文件分别改名为dos.bin和dos.ezb,连同启动盘dos.img一同放入\boot文件夹。运行

bcdedit /store %bcd_path% /create /d "启动 DOS" /application bootsector
//返回:项 {41ac9c34-1fd8-11e0-8355-a4badbfc7822} 成功创建。请自行更改GUID。
bcdedit /store %bcd_path% /set {41ac9c34-1fd8-11e0-8355-a4badbfc7822} device boot
bcdedit /store %bcd_path% /set {41ac9c34-1fd8-11e0-8355-a4badbfc7822} path \boot\dos.bin
bcdedit /store %bcd_path% /displayorder {41ac9c34-1fd8-11e0-8355-a4badbfc7822} /addlast

这样便可以即由bootmgr引导dos启动盘了,easyboot设置的时候可以全用黑色,默认停留时间1秒,这样启动的时候就不会跳出来easyboot的菜单,看起来就像bootmgr直接进入dos一样。当然ezboot可以用grub代替,后面会讲。
2 bootmgr引导xp/xpe包括winpe1.X版本(nt5)
这个很常见了,我以前也写过 http://www.wingwy.com/archives/2010_07_613.html 为了完整性这里再重复写一下。其实很简单,创建{ntldr}项,配置device和path一下就可以了。
bcdedit /store %bcd_path% /create {ntldr} /d “安装 Windows XP”
bcdedit /store %bcd_path% /set {ntldr} device boot
bcdedit /store %bcd_path% /set {ntldr} path \i386\SETUPLDR.BIN

以上是安装xp的例子启动xp和xpe的引导类似。
3 bootmgr引导vista/2008/win7包括winpe2.0及以后的版本,wim和vhd文件(nt6)
直接的引导可以参见 http://www.wingwy.com/archives/2008_08_140.html 第二部分。bootmgr本来就是nt6时代的产物,各种引导都是大同小异,比如引导wim文件(pe2.0及以后版本)
bcdedit /store %bcd_path% /create {ramdiskoptions} /d "启动 Windows 7 PE"
bcdedit /store %bcd_path% /set {ramdiskoptions} ramdisksdidevice boot
bcdedit /store %bcd_path% /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
bcdedit /store %bcd_path% /create /d "启动 Windows 7 PE" /application osloader
//返回:项 {cb942a73-1fe1-11e0-8355-a4badbfc7822} 成功创建。请自行更改GUID。
bcdedit /store %bcd_path% /set {cb942a73-1fe1-11e0-8355-a4badbfc7822} device ramdisk=[boot]\boot\winpe.wim,{ramdiskoptions}
bcdedit /store %bcd_path% /set {cb942a73-1fe1-11e0-8355-a4badbfc7822} path \windows\system32\boot\winload.exe
bcdedit /store %bcd_path% /set {cb942a73-1fe1-11e0-8355-a4badbfc7822} osdevice ramdisk=[boot]\boot\winpe.wim,{ramdiskoptions}
bcdedit /store %bcd_path% /set {cb942a73-1fe1-11e0-8355-a4badbfc7822} systemroot \windows
bcdedit /store %bcd_path% /set {cb942a73-1fe1-11e0-8355-a4badbfc7822} winpe yes
bcdedit /store %bcd_path% /set {cb942a73-1fe1-11e0-8355-a4badbfc7822} detecthal yes
bcdedit /store %bcd_path% /displayorder {cb942a73-1fe1-11e0-8355-a4badbfc7822} /addlast

bootmrg引导vhd文件也是类似,将device ramdisk改为device vhd 就行了,比如
device vhd=[boot]\winpe\pe.vhd
当然,别忘了其他的配置项。
4 bootmgr引导grub4dos以及linux和iso文件
这个也可以通过bootsector模式来实现,bootmgr-〉grldr.mbr-〉GRLDR
bcdedit /store %bcd_path% /create /d "GRUB4DOS" /application bootsector
//返回:项 {366d296e-1fdf-11e0-8355-a4badbfc7822} 成功创建。请自行更改GUID。
bcdedit /store %bcd_path% /set {366d296e-1fdf-11e0-8355-a4badbfc7822} device boot
bcdedit /store %bcd_path% /set {366d296e-1fdf-11e0-8355-a4badbfc7822} path \grldr.mbr
bcdedit /store %bcd_path% /displayorder {366d296e-1fdf-11e0-8355-a4badbfc7822} /addlast

这一步实现后,一切都好办了,bootmgr可以引导linux以及iso文件了,当然也可以这样引导dos启动盘。
这里的例子是光盘,其实硬盘和u盘启动也是类似的,只需要注意device选项,将 device boot 改成对应的盘符就可以了,比如 device partition=C: 。 相应的路径[boot]\boot要改为[C:]\boot 。光盘的引导文件可以直接用win7安装盘提取的bif文件,硬盘和u盘可以用bootsect强制写入引导信息
bootsect /nt60 c: /force /mbr
另外,很多网友在多启动光盘的合盘设置以及u盘启动上遇到了麻烦,这些问题自己多试几次倒也可以解决。不过我想在这里写一下,免得大家在同一个问题上无谓的浪费时间。呵呵,如果有要想折腾的网友也可以自己试一下,非常欢迎你能反馈一下情况,很多问题没有经历过确实不懂。
最后,光盘有xp安装的时候ISO的不能用UDF格式,ultraiso写入u盘启动的时候也有问题。相关文章在这里 http://www.wingwy.com/archives/2011_01_801.html 照着设置就可以了。如果加入grub4dos后,光盘又有新问题,比如,允许小写字母,禁用Joliet,文件名格式Max(221)等。感谢crow网友的讨论, 在这里 http://www.wingwy.com/archives/2010_07_672.html/comment-page-4#comment-4667 可以看到详细的讨论。

[ 本帖最后由 yishuihan945 于 2012-8-25 17:04 编辑 ]
作者: yishuihan945    时间: 2012-8-20 22:57
简单创建U盘启动的WinPE2.0作者: wingwy 发表于:2008年08月9日 8,047 次浏览, 15 条评论 »
光盘版和硬盘版的WinPE2.0实现方法已经很多了。U盘版的WinPE1.X也比较多,很多人问我应该怎样弄U盘启动的WinPE2.0,其实很简单,至少有2种方式。
先说一种RAM方式引导的,这也是我推荐的一种。
1、找个你认为好用的WinPE2.0光盘镜像。以微软默认的结构为例,主要文件目录结构
│ bootmgr

├─boot
│ │ bcd
│ │ boot.sdi
│ │
│ └─fonts
│ chs_boot.ttf
│ wgl4_boot.ttf

└─Sources
boot.wim
启动方式为bootmgr读取bootcd文件,bcd文件中包含的RAM镜像Sourcesoot.wim。
2、用bootsect.exe实现U盘的引导。(注意选择盘符u:)
运行 :
bootsect /nt60 u: /force /mbr

3、创建bcd引导配置文件。 运行

bcdedit /createstore c:123 �
bcdedit /store c:123 /create {bootmgr} /d "Windows Boot Manager" �
bcdedit /store c:123 /set {bootmgr} device boot �
bcdedit /store c:123 /timeout 3 �
bcdedit /store c:123 /set {bootmgr} locale "zh-CN" �

4、创建RAM入口

bcdedit /store c:123 /create {ramdiskoptions} /d "启动 Windows PE"
bcdedit /store c:123 /set {ramdiskoptions} ramdisksdidevice boot
bcdedit /store c:123 /set {ramdiskoptions} ramdisksdipath ootoot.sdi
bcdedit /store c:123 /create {255d7198-65d8-11dd-ba90-005056c00008} /d "启动 Windows PE" /application osloader

5、具体配置

bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} device ramdisk=[boot]sourcesoot.wim,{ramdiskoptions}
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} path windowssystem32ootwinload.exe
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} osdevice ramdisk=[boot]sourcesoot.wim,{ramdiskoptions}
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} systemroot windows
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} winpe yes
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} detecthal yes
bcdedit /store c:123 /displayorder {255d7198-65d8-11dd-ba90-005056c00008} /addlast

好了,把c:123改名为bcd,按照第1步中的文件目录结构把相应的文件拷贝到U盘上就可以实现U盘启动的WinPE2.0了。
我们还可以进一步完善它
1、虽然设置了 /set {bootmgr} locale “zh-CN” 此时的引导说明还是英文的, 要显示中文,需要相应的mui文件放到bootzh-cn目录。
2、添加MEMTEST.EXE内存测试项

bcdedit /store c:123 /create {memdiag} /d "Windows 内存诊侧" �
bcdedit /store c:123 /set {memdiag} device boot �
bcdedit /store c:123 /set {memdiag} path ootmemtest.exe �
bcdedit /store c:123 /toolsdisplayorder {memdiag} /addlast �
bcdedit /store c:123 /set {memdiag} locale "zh-CN" �

另外还有一种实现U盘启动的WinPE2.0的方法,类似于把WinPE2.0安装到U盘。
1、展开boot.wim到U盘(注意盘符)
imagex /apply d:sourcesoot.wim 1 u:
2、创建bcd引导配置文件。 运行

bcdedit /createstore c:123 �
bcdedit /store c:123 /create {bootmgr} /d "Windows Boot Manager" �
bcdedit /store c:123 /set {bootmgr} device boot �
bcdedit /store c:123 /timeout 3 �
bcdedit /store c:123 /set {bootmgr} locale "zh-CN" �

3、创建引导入口

bcdedit /store c:123 /create {255d7198-65d8-11dd-ba90-005056c00008} /d "启动 Windows PE" /application osloader

4、具体配置

bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} device partition=boot
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} path windowssystem32ootwinload.exe
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} osdevice partition=boot
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} systemroot windows
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} winpe yes
bcdedit /store c:123 /set {255d7198-65d8-11dd-ba90-005056c00008} detecthal yes
bcdedit /store c:123 /displayorder {255d7198-65d8-11dd-ba90-005056c00008} /addlast

5、拷贝boot文件夹和bootmgr文件到U盘。
完成
另外,如果用bootsect不能实现U盘引导,可以用diskpart,运行

diskpart
select disk 1
clean
create partition primary
select partition 1
active
format fs=ntfs quick
assign
exit

作者: yishuihan945    时间: 2012-8-21 15:41


###第1步################################################################################################################
bcdedit /createstore c:\boot\bcd
##
创建一个记录文件123 (路径和文件名随便啦)

###第2步###############################################################################################################
bcdedit /store c:\boot\bcd /create {bootmgr} /d "Windows Boot Manager"
##
创建主菜单入口ID

bcdedit /store c:\boot\bcd /set {bootmgr} device partition=c:
##
设置主菜单引导程序所在分区

bcdedit /store c:\boot\bcd /timeout 5
##
设置主菜单的显示时间30秒

bcdedit /store c:\boot\bcd /set {bootmgr} locale "zh-CN"
##
设置主菜单的语言为中文

###第3步#################################################################################################################
bcdedit /store c:\boot\bcd /create /d "Microsoft Windows Vista" /application osloader
##
添加Vista启动项ID

###第4步#############这里会生成一串数字ID,复制第3步生成的数字ID并替换下面的{数字Id},如果你还装Win2008的话就再多做一个第3步和第4步#######
bcdedit /store c:\boot\bcd /set {数字Id} device partition=c:
##设置Vista引导文件所在分区

bcdedit /store c:\boot\bcd /set {数字Id} path \windows\system32\winload.exe
##设置Vista引导文件路径

bcdedit /store c:\boot\bcd /set {数字Id} osdevice partition=c:

##设置Vista所在分区

bcdedit /store c:\boot\bcd /set {数字Id} systemroot \windows
##设置Vista所在文件夹

bcdedit /store c:\boot\bcd /set {数字Id} locale "zh-CN"
##设置Vista高级启动菜单的语言为中文

bcdedit /store c:\boot\bcd /displayorder {数字Id} /addfirst
##添加Vista到主菜单启动列表的最后一项(addlast是显示在顶部)

bcdedit /store c:\boot\bcd /default {数字Id}
##设置Vista操作系统为默认启动的系统, {legacy}是旧版本的Windows

###第5步################################################################################################################
bcdedit /store c:\boot\bcd /create {ntldr} /d "Microsoft Windows XP Professional"
##
添加xp,2003启动项ID

bcdedit /store c:\boot\bcd /set {ntldr} device partition=d:
##
设置xp,2003引导文件所在分区

bcdedit /store c:\boot\bcd /set {ntldr} path \ntldr
##
设置xp,2003引导文件路径(98,me,xp,200,2003是用ntldr启动的)

bcdedit /store c:\boot\bcd /displayorder {ntldr} /addfirst
##
添加xp,2003到主菜单启动列表的最后一项(addlast是显示在底部)

###第6步################################################################################################################
bcdedit /store c:\boot\bcd /create {memdiag} /d "Windows 内存诊侧"
##添加windows内存诊侧启动项ID

bcdedit /store c:\boot\bcd /set {memdiag} device partition=c:
##
设置windows内存诊侧引导文件所在分区

bcdedit /store c:\boot\bcd /set {memdiag} path \boot\memtest.exe
##
设置windows内存诊侧启动程序文件路径

bcdedit /store c:\boot\bcd /toolsdisplayorder {memdiag} /addlast
##
添加windows内存诊侧到主菜单工具列表的最后一项(addfirst是显示在顶部)

bcdedit /store c:\boot\bcd /set {memdiag} locale "zh-CN"
##
设置windows内存诊侧的语言为中文

###第7步#################################################################################################################
bcdedit /export c:\456
##
备份原有的系统引导记录到 c:\456

bcdedit /import c:\boot\bcd
##
记录文件信息导入到系统引导记录

bcdedit /enum all

##
察看系统引导记录中的所有信息

###OK完成了!!##############################################################################################################
作者: yishuihan945    时间: 2012-8-21 16:51
Bcdedit命令详解 Bcdedit 位于X:\Windows\system32\   "X:"为安装vista的盘符。
储存操作指令
====================
/createstore 创建一个新的空白启动配置数据文件。
bcdedit /createstore C:\Data\BCD 创建BCD启动配置数据文件储存到“C:\DATA\”文件夹。
/export 备份启动配置数据文件。
bcdedit /export "C:\Data\BCD Backup" 备份BCD启动配置文件到“C:\Data\”文件夹,并以“BCD Backup”命名。
/import 还原启动配置数据文件。
bcdedit /import "C:\Data\BCD Backup" 从“C:\Data\”文件夹恢复BCD启动配置文件。
储存项目操作指令
====================
/copy 项目拷贝
   操作系统启动项目的拷贝:
   bcdedit /copy {cbd971bf-b7b8-4885-951a-fa03044f5d71} /d "Copy of entry"
/create 新建项目
   创建操作系统载入程序项目的 NTLDR(Ntldr):
   bcdedit /create {ntldr} /d "Earlier Windows OS Loader"
   创建存储器磁碟另外的选择项项目:
   bcdedit /create {ramdiskoptions} /d "Ramdisk options"
   创建一个新的操作系统启动项目:
   bcdedit /create /d "Windows Vista" /application osloader
   创建一个新的调试器:
   bcdedit /create {dbgsettings} /d "Debugger Settings"
/delete 删除项目
   删除指定的操作系统项目:
   bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71}
   删除指定的操作系统项目但启动时不显示项目(彻底删除):
   bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} /cleanup
   删除指定的操作系统项目但启动时显示项目:
   bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} /nocleanup
   删除操作系统载入程序项目的 NTLDR:
   bcdedit /delete {ntldr} /f
项目选择操作指令
====================
/deletevalue 删除项目选择项。
   删除启动管理的bootmgr选择项项目:
   bcdedit /deletevalue {bootmgr} bootsequence
   删除(WinPE)操作系统的数值开机项目:
   bcdedit /deletevalue winpe
   删除来自指定的操作的 Windows PE 数值系统开机项目:
   bcdedit /deletevalue {cbd971bf-b7b8-4885-951a-fa03044f5d71} winpe
/set 设定项目选择项数值。
   设定操作系统“cbd971bf-b7b8-4885-951a-fa03044f5d71”引导分区“C”:
   bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} device partition=C:
   指定的操作系统引导文件“ windows\ system 32\ winload.exe”:
   bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} path \windows\system32\winload.exe
   设定“NX”为“OptIn”:
   bcdedit /set nx optin
   更改系统名称
   默认XP系统名称在Vista启动管理器中是"earlier version of Windows",更改:
   bcdedit /set {ntldr} Deion "Windows XP Professional SP2"
   默认Vista系统名称在Vista启动管理器中是"Microsoft Windows",更改:
   bcdedit /set {current} Deion "Windows Vista 5456"
输出控制指令
====================
/enum  在储存中的列表项目。
   列出所有的操作系统载入程序启动项目:
   bcdedit /enum OSLOADER
   列出所有的启动管理项目:
   bcdedit /enum BOOTMGR
   列出默认的启动项目:
   bcdedit /enum {default}
   列出指定的操作系统启动项目:
   bcdedit /enum {b38a9fc1-5690-11da-b795-e9ad3c5e0e3a}
/v 列出所有活动的项目
   bcdedit /enum ACTIVE /v
启动管理控制指令
====================
/bootsequence   设定启动列表顺序。
   设定二个操作系统项目和启动顺序:
   bcdedit /bootsequence {802d5e32-0784-11da-bd33-000476eba25f} {cbd971bf-b7b8-4885-951a-       fa03044f5d71} {ntldr}
   加入操作系统项目为启动列表最后项:
   bcdedit /bootsequence {802d5e32-0784-11da-bd33-000476eba25f} /addlast
/default        设定默认启动项目。
   设定默认启动项目:
   bcdedit /default {cbd971bf-b7b8-4885-951a-fa03044f5d71}
   设定默认启动操作系统程序为 NTLDR:
   bcdedit /default {ntldr}
/displayorder   设定哪一个系统启动显示多启动画面。
   设定二个操作系统项目和在启动管理显示命令中被建立操作系统载入的程序 NTLDR:
   bcdedit /displayorder {802d5e32-0784-11da-bd33-000476eba25f}
        {cbd971bf-b7b8-4885-951a-fa03044f5d71} {ntldr}
   把指定的操作系统项目加入启动管理显示命令结束:
   bcdedit /displayorder {802d5e32-0784-11da-bd33-000476eba25f} /addlast
/timeout        设定启动暂停数值。
/toolsdisplayorder  设定命令在哪一个启动管理显示工具画面。
   设定二个工具项目和内存诊断在那启动管理工具显示命令:
   bcdedit /toolsdisplayorder {802d5e32-0784-11da-bd33-000476eba25f}
        {cbd971bf-b7b8-4885-951a-fa03044f5d71} {memdiag}
   把指定的工具项目加入启动的结束管理工具显示命令:
   bcdedit /toolsdisplayorder {802d5e32-0784-11da-bd33-000476eba25f} /addlast
为一个启动应用程序控制紧急处理服务的指令
====================
/bootems        
   开启启动管理紧急处理服务:
   bcdedit /bootems {bootmgr} ON
/ems            
  为目前的操作系统启动项目 EMS 开启:
    bcdedit /ems ON
/emssettings    设定紧急处理服务参数。
  设定 EMS 参数使用基本输出入系统设定:
  bcdedit /emssettings BIOS
本贴来自中关村在线产品论坛:<a href='http://group.zol.com.cn/'>http://group.zol.com.cn/&lt;/a>,本帖地址:<a href='http://nbbbs.zol.com.cn/1/9_64.html' target='_blank'>http://nbbbs.zol.com.cn/1/9_64.html&lt;/a>

在之前基于NT的Windows系统中,Windows使用Ntldr作为Boot Loader来启动系统,——所谓boot loader,在指在操作系统内核运行之前执行的一段小程序,系统通过它来初始化硬件设备、建立内存空间的映射图等,将系统的软硬件环境设置成一个合适的状态,为最终调用操作系统内核准备好正确的环境。——在启动过程中,Ntldr 使用Boot.ini 文件来确定在启动/引导过程中要显示哪些操作系统选项,我们对启动选项的设置可以通过修改boot.ini文件中相应内容实现。
  在Windows Vista中,微软引入了一种全新的boot loader架构, Windows Boot Manager (Bootmgr.exe)。与Ntldr严重地依赖于硬件不同的是,Windows Vista中的新架构可以实现完整的硬件独立性,且能够与多种操作系统无缝结合,让Windows Vista的启动/引导过程更加快速与安全。同时,将之前Windows 系统中由Boot.ini管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据),当然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe),来管理启动设置。
  BCDEdit : Windows Vista启动设置编辑工具
  在传统的基于BIOS的计算机中,如果只安装Windows Vista,除了极早期的Windows Vista测试版本外,您将会发现 Boot.ini 文件已经彻底从系统中消失;如果系统中安装了Windows Vista和之前的WIndows系统如Windows XP,虽然仍可找到 Boot.ini 文件,不过,这个文件只作用于那些系统,而不会对 Windows Vista的启动有任何影响。
  在基于EFI (Extensible Firmware Interface : 可扩展固件接口,以后采用这种接口的PC会越来越多 )的计算机中,Boot.ini 文件则更不复存在,在基于EFI的系统中,启动选项被贮存在主板的存储器中。此时要修改启动选项,要么通过能够读写NVRAM的工具如NvrBoot,要么使用上文提到的BCDEdit。
  由此可见,在Windows Vista中,想要再像之前Windows XP中那样通过一个简单的文本编辑器来修改Boot.ini的方式来管理启动选项已经不可能了,要对启动设置进行修改,只能使用命令格式相对要复杂得多的BCDEdit。
  此外,微软也在Windows Vista 中提供了可通过WMI (Windows Management Instrumentation : Windows管理规范)调用的 BCD 类,通过它可以用编程的方式修改BCD数据,不过,相信对绝大多数用户而言,这更是不可能的任务。
  启动BCDEdit
  需要注意的是,BCDEdit不是一个运行于图形界面下的程序,而是一个命令行工具,该文件 (Bcdedit.exe) 位于 “\Windows\System32”目录下。
  要执行BCDEdit,首先应进入命令行窗口,并要将操作用户并提升至管理员权限。

  在命令行窗口中,转到系统目录如 “C:/windows/system32”下,然后输入“ bcdedit” 即可。
  BCDEdit命令简介
  通过命令行工具Bcdedit,我们可以添加、删除及修改BCD (Boot Configuration Data)中的对象。在BCD中,每个对象均具有唯一的 GUID (Globally Unique Identifier : 全局唯一标识符),如系统中的每块硬盘、每个分区的GUID (全局唯一标识符)均不相同。
  在BCD中,硬盘或分区的GUID可分为如下几类:
{legacy} :指存在上一代Windows系统如Windows XP的硬盘或分区;
{default} : 默认操作系统所在硬盘或分区;
{current} : 当前硬盘或分区;
{c34b751a-ff09-11d9-9e6e-0030482375e7} : 类似于这个格式的GUID指其他安装了操作系统的硬盘或分区。
(注:这只是个例子,具体数字根据硬盘或分区参数会有相应变化,但均会类似于{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}格式)。
  BCDEDIT命令
bcdedit /? : 显示命令帮助
bcdedit.exe /? CREATESTORE : 显示命令参数“ CREATESTORE ”的详细信息,——当然,“ CREATESTORE ”也只是示例,使用中对其他任何可用参数也均可使用类似格式查看该参数的具体说明。
bcdedit 或 bcdedit /enum all : 显示Windows Vista系统当前的启动设置数据,这时系统中所有安装了操作系统的硬盘或分区均会显示相应的 GUID 标识,如 {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 。
  使用BCDEdit备份与恢复启动选项
  在对Windows Vista的启动选项修改之前,最好先对其备份,以防万一操作失误或其他故障导致系统无法启动。
bcdedit /export “D:\BCD Backup\Bcd Backup” : 将启动设置备份到D盘 “BCD Backup” 目录下;
bcdedit /import “D:\BCD Backup\Bcd Backup” : 恢复之前备份在D盘 “BCD Backup”目录下启动选项。
  使用BCDEdit修改启动菜单选项
  作为一种良好的操作习惯,在对Windows Vista的启动选项进行任何修改前,首先要对BCD中的启动选项进行备份,相应的命令上页我们已介绍过,在此不再赘述;其次,使用“bcdedit ”或“ bcdedit /enum all ”来查看系统中硬盘或分区的正确 GUID 标识,并将其记录下来。毕竟,BCDEdit只是一款命令行工具,我们操作时需手动输入类似“{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”这样的长字符串时,很容易出错,而这往往会导致Windows Vista启动失败。
  下面详细介绍使用BCDEdit修改启动选项的常用命令格式:
bcdedit /set {legacy} Description “Windows XP Professional SP2” : 修改上一代操作系统在启动菜单中的显示内容,比如说我们也可将其修改为“Vista天地专用XP SP2”之类。注意,命令中的引号不可省略;
bcdedit /set {current} description “Windows Vista Build 5270 x86″ : 修改当前启动硬盘或分区上的操作系统在启动菜单中的显示内容。注意,当前分区上的操作系统可能为Windows Vista,也可以是其他系统,当然,命令中的引号也不可省略;
bcdedit /set {5189b25c-5558-4bf2-bca4-289b11bd29e2} description “Windows Vista Build 5270 x64” : 修改安装于其他硬盘或分区的系统在启动菜单中的显示内容,使用这项命令时一定要注意该硬盘/分区的GUID输入正确,相应的GUID可通过“ bcdedit ”或“ bcdedit /enum all ”命令查看。
bcdedit /default {current} : 将当前启动硬盘/分区中的操作系统设置为默认启动的系统;
bcdedit /default {5189b25c-5558-4bf2-bca4-289b11bd29e2} : 设置指定GUID上的操作系统为默认启动的系统;
bcdedit /default {legacy} : 设置上一代Windows 系统Windows XP为默认启动的系统;
bcdedit /displayorder : 设置启用菜单中各项的显示顺序,如:
bcdedit.exe /displayorder {legacy} {current}
将首先显示Windows XP,然后再显示默认启动的系统如Windows Vista;
bcdedit /timeout 15 : 将默认的启动菜单显示时间30秒更改为15秒,当然,您可以将这个时间修改为任何您希望的数值。
  使用BCDEdit修复硬盘/分区结构错误
  在对启动选项的修改过程中,如添加或删除某个硬盘/分区时,可能会因操作中的不慎导致硬盘/分区结构的混乱,除了采用恢复修改前的备份方法外,也可以首先使用BCDEdit来尝试一下修复。
  具体方法如下:
X:\>X:\boot\fixntfs.exe -lh -all : 这时的“ X: ”指引导目录 “boot” 所在的硬盘/分区;
bcdedit /set {5189b25c-5558-4bf2-bca4-289b11bd29e2} device partition=X: : 将指定GUID的分区设为启动分区。注意,这里的“ X: ”的GUID须与指定值不同,同时,运行该命令后,必须接着运行下面的osdevice命令;
bcdedit /set {5189b25c-5558-4bf2-bca4-289b11bd29e2} osdevice partition=X: : 将指定GUID的分区设为启动分区。注意,这个命令必须与上面的device命令配对使用,同时“ X: ”的GUID须与指定值不同。
资料引用:http://www.knowsky.com/340968.html
作者: yishuihan945    时间: 2012-8-24 23:05
Bcdedit  Vista系统常用英文专业词语解释大全
  在Windows Vista中的一个命令行工具,用于建立和重新配置bootloader,后者无须再使用boot.ini文件。
  使用BCDEdit修改Windows Vista的系统启动菜单
  在之前基于NT的Windows系统中,Windows使用Ntldr作为Boot Loader来启动系统,
  ——所谓boot loader,在指在内核运行之前执行的一段小程序,系统通过它来初始化硬件设备、建立内存空间的映射图等,将系统的软硬件环境设置成一个合适的状态,为最终调用操作系统内核准备好正确的环境。——在启动过程中,Ntldr 使用Boot.ini 文件来确定在启动/引导过程中要显示哪些操作系统选项,我们对启动选项的设置可以通过修改boot.ini文件中相应内容实现。 操作系统
  在Windows Vista中,微软引入了一种全新的boot loader架构, Windows Boot Manager (Bootmgr.exe)。与Ntldr严重地依赖于硬件不同的是,Windows Vista中的新架构可以实现完整的硬件独立性,且能够与多种操作系统无缝结合,让Windows Vista的启动/引导过程更加快速与安全。同时,将之前Windows 系统中由Boot.ini管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据),当然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe),来管理启动设置。
  BCDEdit : Windows Vista启动设置编辑工具
  在传统的基于BIOS的计算机中,如果只安装Windows Vista,除了极早期的Windows Vista测试版本外,您将会发现 Boot.ini 文件已经彻底从系统中消失;如果系统中安装了Windows Vista和之前的WIndows系统如Windows XP,虽然仍可找到 Boot.ini 文件,不过,这个文件只作用于那些系统,而不会对 Windows Vista的启动有任何影响。
  在基于EFI (Extensible Firmware Interface : 可扩展固件接口,以后采用这种接口的PC会越来越多 )的计算机中,Boot.ini 文件则更不复存在,在基于EFI的系统中,启动选项被贮存在主板的存储器中。此时要修改启动选项,要么通过能够读写NVRAM的工具如NvrBoot,要么使用上文提到的BCDEdit。
  由此可见,在Windows Vista中,想要再像之前Windows XP中那样通过一个简单的文本编辑器来修改Boot.ini的方式来管理启动选项已经不可能了,要对启动设置进行修改,只能使用命令格式相对要复杂得多的BCDEdit。
  此外,微软也在Windows Vista 中提供了可通过WMI (Windows Management Instrumentation : Windows管理规范)调用的 BCD 类,通过它可以用编程的方式修改BCD数据,不过,相信对绝大多数用户而言,这更是不可能的任务。
  启动BCDEdit
  需要注意的是,BCDEdit不是一个运行于图形界面下的程序,而是一个命令行工具,该文件 (Bcdedit.exe) 位于 “\Windows\System
  32”目录下。
  要执行BCDEdit,首先应进入命令行窗口,并要将操作用户并提升至管理员权限。
  在命令行窗口中,转到系统目录如 “C:/windows/system32”下,然后输入“ bcdedit” 即可。
  BCDEdit命令简介
  通过命令行工具Bcdedit,我们可以添加、删除及修改BCD (Boot Configuration Data)中的对象。在BCD中,每个对象均具有唯一的 GUID (Globally Unique Identifier : 全局唯一标识符),如系统中的每块硬盘、每个分区的GUID (全局唯一标识符)均不相同。
  在BCD中,硬盘或分区的GUID可分为如下几类: 
  :指存在上一代Windows系统如Windows XP的硬盘或分区;
  : 默认所在硬盘或分区;操作系统
  : 当前硬盘或分区;
  : 类似于这个格式的GUID指其他安装了操作系统的硬盘或分区。
  (注:这只是个例子,具体数字根据硬盘或分区参数会有相应变化,但均会类似于格式)。
  BCDEDIT命令
  bcdedit /? : 显示命令帮助
  bcdedit.exe /? CREATESTORE : 显示命令参数“ CREATESTORE ”的详细信息,——当然,“ CREATESTORE ”也只是示例,使用中对其他任何可用参数也均可使用类似格式查看该参数的具体说明。
  bcdedit 或 bcdedit /enum all : 显示Windows Vista系统当前的启动设置数据,这时系统中所有安装了操作系统的硬盘或分区均会显示相应的 GUID 标识,如 。
  使用BCDEdit备份与恢复启动选项
  在对Windows Vista的启动选项修改之前,最好先对其备份,以防万一操作失误或其他故障导致系统无法启动。 
  bcdedit /export “D:\BCD Backup\Bcd Backup” : 将启动设置备份到D盘 “BCD Backup” 目录下;
  bcdedit /import “D:\BCD Backup\Bcd Backup” : 恢复之前备份在D盘 “BCD Backup”目录下启动选项。
  使用BCDEdit修改启动菜单选项
  作为一种良好的操作习惯,在对Windows Vista的启动选项进行任何修改前,首先要对BCD中的启动选项进行备份,相应的命令
  上页我们已介绍过,在此不再赘述;其次,使用“bcdedit ”或“ bcdedit /enum all ”来查看系统中硬盘或分区的正确 GUID 标识,并将其记录下来。毕竟,BCDEdit只是一款命令行工具,我们操作时需手动输入类似“”这样的长字符串时,很容易出错,而这往往会导致Windows Vista启动失败。
  下面详细介绍使用BCDEdit修改启动选项的常用命令格式: 
  bcdedit /set Description “Windows XP Professional SP2” : 修改上一代在启动菜单中的显示内容,比如说我们也可将其修改为“Vista天地专用XP SP2”之类。注意,命令中的引号不可省略;操作系统
  bcdedit /set description “Windows Vista Build 5270 x86″ : 修改当前启动硬盘或分区上的操作系统在启动菜单中的显示内容。注意,当前分区上的操作系统可能为Windows Vista,也可以是其他系统,当然,命令中的引号也不可省略;
  bcdedit /set description “Windows Vista Build 5270 x64” : 修改安装于其他硬盘或分区的系统在启动菜单中的显示内容,使用这项命令时一定要注意该硬盘/分区的GUID输入正确,相应的GUID可通过“ bcdedit ”或“ bcdedit /enum all ”命令查看。
  bcdedit /default : 将当前启动硬盘/分区中的操作系统设置为默认启动的系统;
  bcdedit /default : 设置指定GUID上的操作系统为默认启动的系统;
  bcdedit /default : 设置上一代Windows 系统Windows XP为默认启动的系统;
  bcdedit /displayorder : 设置启用菜单中各项的显示顺序,如:
  bcdedit.exe /displayorder
  将首先显示Windows XP,然后再显示默认启动的系统如Windows Vista;
  bcdedit /timeout 15 : 将默认的启动菜单显示时间30秒更改为15秒,当然,您可以将这个时间修改为任何您希望的数值。
  使用BCDEdit修复硬盘/分区结构错误
  在对启动选项的修改过程中,如添加或删除某个硬盘/分区时,可能会因操作中的不慎导致硬盘/分区结构的混乱,除了采用恢复修改前的备份方法外,也可以首先使用BCDEdit来尝试一下修复。
  具体方法如下: 
  X:\>X:\boot\fixntfs.exe -lh -all : 这时的“ X: ”指引导目录 “boot” 所在的硬盘/分区;
  bcdedit /set device partition=X: : 将指定GUID的分区设为启动分区。注意,这里的“ X: ”的GUID须与指定值不同,同时,运行该命令后,必须接着运行下面的osdevice命令;
  bcdedit /set osdevice partition=X: : 将指定GUID的分区设为启动分区。注意,这个命令必须与上面的device命令配对使用,同时“ X: ”的GUID须与指定值不同。
  Bcdedit命令详解,自定义Vista启动管理项
  Bcdedit 位于X:\Windows\system32\ "X:"为安装Vista的盘符。
  储存操作指令
  ====================
  /createstore 创建一个新的空白启动配置数据文件。
  bcdedit /createstore C:\Data\BCD 创建BCD启动配置数据文件储存到“C:\DATA\”文件夹。
  /export 备份启动配置数据文件。
  bcdedit /export "C:\Data\BCD Backup" 备份BCD启动配置文件到“C:\Data\”文件夹,并以“BCD Backup”命名。
  /import 还原启动配置数据文件。
  bcdedit /import "C:\Data\BCD Backup" 从“C:\Data\”文件夹恢复BCD启动配置文件。
  储存项目操作指令
  ====================
  /copy 项目拷贝
  操作系统启动项目的拷贝:
  bcdedit /copy /d "Copy of entry"
  /create 新建项目
  创建操作系统载入程序项目的 NTLDR(Ntldr):
  bcdedit /create /d "Earlier Windows OS Loader"
  创建存储器磁碟另外的选择项项目:
  bcdedit /create /d "Ramdisk options"
  创建一个新的操作系统启动项目:
  bcdedit /create /d "Windows Vista" /application osloader
  创建一个新的调试器:
  bcdedit /create /d "Debugger Settings"
  /delete 删除项目
  删除指定的操作系统项目:
  bcdedit /delete
  删除指定的操作系统项目但启动时不显示项目(彻底删除):
  bcdedit /delete /cleanup
  删除指定的操作系统项目但启动时显示项目:
  bcdedit /delete /nocleanup
  删除操作系统载入程序项目的 NTLDR:
  bcdedit /delete /f
  项目选择操作指令
  ====================
  /deletevalue 删除项目选择项。
  删除启动管理的bootmgr选择项项目:
  bcdedit /deletevalue bootsequence
  删除(WinPE)操作系统的数值开机项目:
  bcdedit /deletevalue winpe
  删除来自指定的操作的 Windows PE 数值系统开机项目:
  bcdedit /deletevalue winpe
  /set 设定项目选择项数值。
  设定操作系统“cbd971bf-b7b8-4885-951a-fa03044f5d71”引导分区“C”:
  bcdedit /set device partition=C:
  指定的操作系统引导文件“ windows\ system 32\ winload.exe”:
  bcdedit /set path \windows\system32\winload.exe
  设定“NX”为“OptIn”:
  bcdedit /set nx optin
  更改系统名称
  默认XP系统名称在Vista启动管理器中是"earlier version of Windows",更改:
  bcdedit /set Description "Windows XP Professional SP2"
  默认Vista系统名称在Vista启动管理器中是"Microsoft Windows",更改:
  bcdedit /set Description "Windows Vista 5456"
  输出控制指令
  ====================
  /enum 在储存中的列表项目。
  列出所有的操作系统载入程序启动项目:
  bcdedit /enum OSLOADER
  列出所有的启动管理项目:
  bcdedit /enum BOOTMGR
  列出默认的启动项目:
  bcdedit /enum
  列出指定的操作系统启动项目:
  bcdedit /enum
  /v 列出所有活动的项目
  bcdedit /enum ACTIVE /v
  启动管理控制指令
  ====================
  /bootsequence 设定启动列表顺序。
  设定二个操作系统项目和启动顺序:
  bcdedit /bootsequence {cbd971bf-b7b8-4885-951a- fa03044f5d71}
  加入操作系统项目为启动列表最后项:
  bcdedit /bootsequence /addlast
  /default 设定默认启动项目。
  设定默认启动项目:
  bcdedit /default
  设定默认启动操作系统程序为 NTLDR:
  bcdedit /default
  /displayorder 设定哪一个系统启动显示多启动画面。
  设定二个操作系统项目和在启动管理显示命令中被建立操作系统载入的程序 NTLDR:
  bcdedit /displayorder
  把指定的操作系统项目加入启动管理显示命令结束:
  bcdedit /displayorder /addlast
  /timeout 设定启动暂停数值。
  /toolsdisplayorder 设定命令在哪一个启动管理显示工具画面。
  设定二个工具项目和内存诊断在那启动管理工具显示命令:
  bcdedit /toolsdisplayorder
  把指定的工具项目加入启动的结束管理工具显示命令:
  bcdedit /toolsdisplayorder /addlast
  为一个启动应用程序控制紧急处理服务的指令
  ====================
  /bootems
  开启启动管理紧急处理服务:
  bcdedit /bootems ON
  /ems
  为目前的操作系统启动项目 EMS 开启:
  bcdedit /ems ON
  /emssettings 设定紧急处理服务参数。
  设定 EMS 参数使用基本输出入系统设定:
  bcdedit /emssettings BIOS


百度百科中的词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
作者: yishuihan945    时间: 2012-8-25 16:57
(感谢victor888 )http://bbs.wuyou.net/forum.php?mod=viewthread&tid=152716&highlight=
定制NT6.X系统启动/安装目录


本贴原名叫:有没有玩破解的人--WIN7相关
====
本人写此贴的初衷主要是想在硬盘/USB盘上定制安装WIN7系统,摆脱WIN7根目录的众多文件夹,经过无数的失败,终于达到了自己的目的。

在开始这前,要感谢chenall, fujianabc和老九等人的讨论,尤其感谢chenall在关键时候帮助破解了难题。

进入正题
大家都知道,VISTA及以上系统其光盘结构为:


QUOTE:
autorun.inf
setup.exe

bootmgr
<boot>
<efi>
<sources>
<support>
<upgrade>



其中:
setup.exe是在WIN下进行安装WIN7的程序
autorn.inf是光盘自动运行文件,插入光盘会通过它运行setup.exe
<boot>文件夹,最重要,含有启动NT6以上系统的启动配置文件BCD(相当于XP的boot.ini),挂载WIM的BOOT.SDI、内存检测和字体等工具
<efi>文件夹,EFI主板启动支持
<support>和<upgrade>就不用说了,是支持和升级相关文件夹。
<sources>,最重要,含有PE文件boot.wim和install.wim,以及在WIN下启动setup所需的文件。

我现在想做的就是把这些文件统计整理到一个文件中进行安装,这里假设我们将所有文件都弄到BOOT文件夹中,操作步骤如下:

1. 更改boot.wim文件的路径
这需要编辑BCD文件,我们使用bcdedit.exe(XP下也可以运行)
先运行:
bcdedit /store BCD文件路径 /enum all /v


QUOTE:
Windows 启动管理器
--------------------
标识符                  {9dea862c-5cdd-4e70-acc1-f32b344d4795}
description             Windows Boot Manager
locale                  en-US
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
default                 {7619dcc9-fafe-11d9-b411-000476eba25f}
displayorder            {7619dcc9-fafe-11d9-b411-000476eba25f}
toolsdisplayorder       {b2721d73-1db4-4c62-bf78-c548a880142d}
timeout                 30

Windows 启动加载器
-------------------
标识符                  {7619dcc9-fafe-11d9-b411-000476eba25f}
device                  ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path                    \windows\system32\boot\winload.exe
description             Windows Setup
locale                  en-US
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
osdevice                ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot              \windows
detecthal               Yes
winpe                   Yes
ems                     Yes

Windows 内存测试程序
---------------------
标识符                  {b2721d73-1db4-4c62-bf78-c548a880142d}
device                  boot
path                    \boot\memtest.exe
description             Windows Memory Diagnostic
locale                  en-US
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}

EMS 设置
------------
标识符                  {0ce4991b-e6b3-4b16-b23c-5e0d9250e5d9}
bootems                 Yes

调试器设置
-----------------
标识符                  {4636856e-540f-4170-a130-a84776f4c654}
debugtype               Serial
debugport               1
baudrate                115200

全局设置
---------------
标识符                  {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
inherit                 {4636856e-540f-4170-a130-a84776f4c654}
                        {0ce4991b-e6b3-4b16-b23c-5e0d9250e5d9}

启动加载器设置
--------------------
标识符                  {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
                        {7ff607e0-4395-11db-b0de-0800200c9a66}

虚拟机监控程序设置
-------------------
标识符                  {7ff607e0-4395-11db-b0de-0800200c9a66}
description             Hypervisor Settings
hypervisordebugtype     Serial
hypervisordebugport     1
hypervisorbaudrate      115200

设备选项
--------------
标识符                  {7619dcc8-fafe-11d9-b411-000476eba25f}
ramdisksdidevice        boot
ramdisksdipath          \boot\boot.sdi



这里我们要改变boot.wim的路径,运行如下命令,

bcdedit /store BCD文件路径 /set {default} device ramdisk=[boot]\boot\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}

同上,将上述的device改成osdevice,再运行一次。

因为我们改变了SOURCES目录的路径,因此还要让PE能找到install.wim文件,要进行下述第2步操作

2.修改startnet.cmd文件
这个文件位于boot.wim第2个映像的windows\system32目录下。
PE启动时会在X:\SOURCES目录下寻找setup.exe文件来进行安装, 如果SOURCES目录没有SETUP.EXE,那么winpeshl.exe会执行system32目录下的winpeshl.ini所指定的文件。如果winpeshl.ini没有指定程序或没有此文件,那么winpeshl.exe将会执行system32目录下的startnet.cmd文件,默认PE下存在此文件,会加载网络配置。我们解决这个boot.wim,可以使用imagex也可以使用sources目录的dism.exe。把这个文件内容变成:


QUOTE:
@echo off
for %%a in (c d e f g h i j k l m n o p q r s t u v w y z) do (if exist %%a:\boot\sources\install.wim x:\sources\winsetup.exe /installfrom:%%a:\boot\sources\install.wim)
exit



当然,要把setup.exe重命名为winsetup.exe
看到了吧,这个setup.exe可以有参数installfrom,有了它,我们就可以指定wim文件的位置了。
修改完毕:imgaex /unmount /commit 挂载的目录

使用grldr启动系统,chainloder /boot/bootmgr来实现启动或安装系统。

合盘
比如把VISTA、WIN7和2008 R2全部放到一个盘来安装,这些盘目录结构都一致,我们该怎么办呢?
当然我样可以通过配置BCD文件来指定boot.wim的位置,也可以将sources目录换成其它名字,可是这样非常的不爽,原因在于我们要通过BCD菜单来选单,没有直接bootmgr启动进入安装直接,我们该如何操作呢?

加注:有关合盘,可以参考微软的方法:Cross-Platform Deployment http://technet.microsoft.com/en-us/library/cc721953(WS.10).aspx

我们可以通过不同的BCD文件来实现直接启动不同的系统。

一切的入手点在于bootmgr这个文件,它是启动管理器,类似于XP的NTLDR,所不同的是这个文件即有CHECKSUM校验,又有数字签名验证,要修改它,必须解决这两个问题

国外的高手解决了checksum问题(http://www.boot-land.net/forums/index.php?showtopic=8043,6楼)
我们必须用VISTA SP0的BOOTMGR,用起文本编辑器打开,在0xe28处将7403更改为EB1A这样就去除了checksum校验。
0x54b68处找到B.O.O.T.\.B.C.D,我们可以将BCD换成我们要的名字,例如VISTA使用BCD,WIN7使用7CD,2008使用8CD等。将这个bootmgr改名为你所需要的就可以了。

这样够了吗?不够,没有解决数字签名的问题,对于这个数字签名,国内有N人写了一篇文章(http://bbs.driverdevelop.com/htm_data/16/0711/106925.html),这篇文件解决了checksum和数字签名,可惜我“水平太潜”,用IDA如何也没有找到他所说的那几个函数,当然也无法修改。

用得着那么复杂的操作吗?用不着,国外的高手同样解决了数字签名问题,而且非常非常的签单,但他们只想到的是PXE启动PE,即用于bootmgr.exe启动过程,经过我试验,这个方法同样对bootmgr有效:

打开BCD文件,运行:bcdedit /store BCD文件 /set {bootmgr} nointegritychecks yes
OK,数字签名问题搞定。

说到这里,你可能要问,为什么不把bootmgr中的boot也给改名了?是的,我也尝试过,可是就是不成功,bootmgr里面所有出现boot的地方都改了,可是就是无法启动。

同样,如果你厉害,可以把sources目录的setup.exewinsetup.dll也给改了,让它不用通过installfrom参数一指定WIM文件,可以直接启动安装。这个setup.exe没有checksum也没有数字签名,IDA打开,有PDB表,修改应该容易些。我尝试着改winsetup.dll失败了。可能你感兴趣,会IDA,那么说不定你会成功。

说到这里,你可能感到不爽,把SOURCES目录放到BOOT里,有什么用啊?目录结构与原来还不一致了,别急,下面告诉你一个比较好的方案:

把WIN7.ISO里面的install.wim放到U盘,参照微软的这篇文章HOW WIN PE WORKS(http://technet.microsoft.com/en-us/library/cc721977(WS.10).aspx),不修改startnet.cmd文件,添加一个winpeshl.ini文件,其内容为启动同目录下的setup.cmd文件,后者的内容同上述第2步的startnet.cmd,winpeshl.ini文件的内容为:


QUOTE:
[launchapps]

x:\windows\system32\setup.cmd



另外,还要把
sources目录的setup.exe更名为winsetup.exe。把修改后的boot.wim放入ISO中,直接


QUOTE:
map ISO文件 (hd32)

chainloader (hd32)
boot


启动即可,这样我们可以随意把ISO和install.wim文件放到想放的位置。


还有没有更灵活的方法了?有的,chenall最终破解了将BOOT.WIM放到与BOOTMGR不在同一介质安装方法,同时经过测试,我俩还研究明白了BCD对畸形目录的写法

OK, 现在假设把BOOT.WIM和INSTATLL.WIM同到到U盘的一个根目录下面,我们可以只留一个WIN7 ISO去除这两个文件的ISO,则我们必须修改BCD文件,因为这里的BOOT.WIM已经与ISO不在同一盘上了:

一切的问题根本在这个BCD文件,如果从与BOOTMGR非同一分区或介质上以RAMDISK启动BOOT.WIM,那么我们需要设定这个BOOT.WIM文件的路径的,光盘BCD目录默认其在SOURCES目录,且启动盘为BOOT,这个BOOT名字是很特殊的设备,是从光盘的BCD里发现的。为此,CHENALL专门写了一篇文章“单击打开:【分享】小技巧,两条命令解决WIN7安装后改MBR启动失败问题”,这是一个重要发现,将硬盘BCD文件启动区设置为BOOT后,MBR怎样改都不会出错。这样的问题最早PT在时空论坛遇到过(单击打开:修复 win 7 引导的一些经验),最后是FUJIANABC给出的解决办法,对比这个办法,还是CHENALL的简单、一劳永逸。

以上是我说的一个插曲,下面我继续说,如何从BCD入手去解决问题,在上面PT的贴子里已经提到了BCD文件是记录MBR和分区信息的,这非常的重要,我当初这所以失败,就是因为只考虑了盘符,不知道还有MBR的问题。解决方法就是先启动WIN系统,比如在PE下,假设你的U盘盘符为C:,那么,你就设置device和osdevice的rmadisk=[C:]\XX,U盘符是什么这里就设置什么,只这样做还不够,还必须改BOOT.SDI的盘符和路径,将ramdisksdidevice设置为=U盘的盘符,好了,你现在能正确启动BOOT.WIM,因为这时BCDEDIT在BCD文件中记录了磁盘的DISK SIGNATURE和分区的起始偏移,盘符只是个代码,BCD里记录的DISK SIGNATURE和OFFSET值才最终决定你是从什么盘什么分区指定DEVICE和OSDEVICE的。另外请参考本人在PE区发的“注册表与盘符”一文,会对DISK SIGNATURE和OFFSET有深入的了解。

对于畸形目录,有一个发现,比如本人的U盘为NTFS系统,dir显示畸形目录名为dat.,我当初在BCD中指定路径时都是使用的dat~1来代替,结果就是不成功,在CHENALL的提醒下,直接使用dat.做为路径名称就成功了。

本人目前的U盘就是把所有的WIN7相关的文件都放入了畸形目录,但没有使用去除了两个WIM文件的ISO,因为感觉体积还是大,就只保留了BOOTMGR和BOOT目录以及下面的BCD和MEMTEST文件,其余的都不要,做了一个1.4M的IMG,启动进直接将其MAP成FD0,再CHAINLOADER (FD0)/BOOTMGR就可以了。

全文完 20091103

[ 本帖最后由 victor888 于 2010-2-11 12:39 编辑 ]




作者: 34205    时间: 2013-10-18 23:47
好东西,收藏·········
作者: yang77    时间: 2013-12-15 18:01
谢谢总结,顶一下
作者: wuhen9988    时间: 2013-12-16 21:59
谢谢谢谢
学习学习
作者: 2011apple    时间: 2013-12-17 09:05
留名..收藏..再研究.....
作者: yhk    时间: 2014-1-4 08:34
都是好东东,收藏了。
作者: poison8866999    时间: 2014-9-13 01:17
yishuihan945 发表于 2012-8-25 16:57

這需要好好的思考消化
先感謝一下再收藏下來
作者: luoning    时间: 2023-1-3 09:28
牛,就是自己水平有限难看懂。后面留下参考学习。谢谢楼主分享经验
作者: luoning    时间: 2023-1-3 12:22
都是好东东,收藏了。非常感谢!
作者: ZMLoveLH    时间: 2023-1-14 13:18
看看楼主提供的教程,学习bootmgr引导模式的知识啊
作者: Sim683    时间: 2023-1-14 19:42
好文章,纪录一下,这要花好多时间学习
作者: huang1987    时间: 2023-11-13 21:03
谢谢分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3