从Windows Vista开始,无论是早期的从纯 DOS 模式下引导还是现在 Windows 2000/XP/Server 2003 采用的 NTLDR + NTDETECT.COM 的引导方式,均被抛弃了。一种被称为 Boot Manager 的组件取代了NTLDR + NTDETECT.COM 的引导方式, 成为 Microsoft在 Windows Vista 里面采用的 Windows 引导方式。在Windows Vista里面,当你启动计算机的时候,首先是 BIOS 开始运行,BIOS 从启动设备里面读取主引导扇区(MBR)的记录,然后把控制交给储存在 MBR里面的启动代码,接着 Boot Manager启动并从Boot Configuration Data (BCD)数据库里面读取启动项目信息并把这些信息显示在屏幕上面,并等待用户选择。当用户选择了一个启动项目以后,Boot Manager 根据用户的选择,从 BCD数据库里面获取相关的启动参数和配置信息,然后开始系统的引导过程。对于安装了 Windows Vista 的机器,Microsoft 将修改被激活的主分区的启动扇区(Windows 安装程序将在磁盘的第一个扇区里面写入 MBR 内容) ,使用新的启动扇区内容替代原有的启动扇区的内容。经典的错误提示信息: “NTLDR is missing”将被“Bootmgr is missing”所取代。 对于VISTA和Windows 2008,默认情况下BCD数据库在放在c:\boot\bcd中;但在windows 7和Windows 2008 r2中系统分区被隐藏起来(安装时系统会划分200M的系统分区,用来存放引导文件),需通过“磁盘管理”(Diskmgmt.msc),对系统分区执行“更改驱动器号和路径”,分配盘符,才能访问。
BCD 文件,本质上就是一个注册表的 hive 文件,因此可以使用注册表编辑器直接对它进行修改。
关于 BCD文件,我们需要关注的内容只有 Objects 下的内容,在 Objects下,有很多以 CLSID命名的
子键,每一个子键均有其特殊的含义。
展开每一个 CLSID 键,一般都会有 2 个字键:Description 和 Elements。在 Elements 键下方,会有树木不等的子键存在,每一个子键都代表不同的含义。有一些是显示的内容,有一些是指向一些特殊的程序或目录用于 Windows Vista 的启动,剩下的一些和 Windows Vista 的启动参数有关。
例如:
12000004 键下的 Element 字符串内容就是用于设定在 Boot Manager 的启动菜单上显示内容的。
12000005 键用于指定 Boot Manager的语言。如果安装了的简体中文版本,那么这里的内容一定是 zh-CN,如果你想使用英文版的 Boot Manager,那么只需要修改为 en-US 即可。不过前提是需要在 \Boot 目录下有一个 en-US 的目录,而且里面有相应的 en-US语言的资源文件。
42000002 键用于指定 Windows的引导程序。在 Windows 里面,引导程序已经改为Winload.exe。
22000002节点用于指定 Windows安装以后的系统目录的名字,默认是 Windows 目录。
如果休眠模式,那么 22000002 节点用于指向休眠文件的文件名,默认是 hiberfil.sys 文件。
42000002 节点用于设置从休眠模式唤醒时由哪个程序完成休眠状态/正常状态的转化。在Windows 如果安装了早期的采用 NTLDR 引导的操作系统,如 Windows 2000/XP/Server 2003,那么 Boot Manager将出现一个叫做{466f5a88-0af2-4f76-9038-095b170dc21c}的 CLSID,这个 CLSID用于代表采用NTLDR启动模式的操作系统的引导程序的名字。 当用户从 Boot Manager里面选择 Earlier version of Windows 菜单项目以后,Boot Manager 将根据 12000002 节点指向的内容调用早期Windows 操作系统的引导程序,默认为 NTLDR。
{9dea862c-5cdd-4e70-acc1-f32b344d4795}是一个专用于代表 Windows Boot Manager 的CLSID。
在{9dea862c-5cdd-4e70-acc1-f32b344d4795}键下面,有一个叫做 24000001 的子键,这个键用于指定将要显示在 Windows Boot Manager 上的操作系统启动菜单的 CLISD 编号。24000001 子键的Element 键是一个 REG_MULTI_SZ 类型的注册表键值,这表示可以写入多个内容。
{b2721d73-1db4-4c62-bf78-c548a880142d}是Windows 内存诊断项目的注册表键值
4、使用第三方工具进行修改(如VistaBootPRO)
相比对其它的几种方法,利用Bcdedit.exe来编辑管理BCD数据库功能更加强,更灵活,同时也操作起来也更为复杂。在以前的博文
和也曾介绍过这个命令行工具。 或Bcdedit /v,完整显示数据库的内容,此时数据库有些参数的值显示为该值的GUID。在上图启动管理器inhert为gobalsettings,用Bcdedit /v显示时,它的值变成了它的GUID。
注意,当在数据库增加一启动菜单项,系统会随机产生一个GUID。但系统中有些GUID是固定的。如下 | | |
| | 9dea862c-5cdd-4e70-acc1f32b344d4795 |
| | a5a30fa2-3d06-4e9f-b5f4a01df9d1fcba |
| | b2721d73-1db4-4c62-bf78c548a880142d |
Windows Resume Application | | 147aa509-0358-4473-b83bd950dda00615 |
| | 466f5a88-0af2-4f769038095b170dc21c |
| | fa926493-6f1c-4193-a41458f0b2456d1e |
| | |
| 5189b25c-5558-4bf2-bca4-289b11bd29e2 | Global RAM defect list that can be inherited by any boot application. |
| 6efb52bf-1766-41db-a6b3-0ee5eff72bd7 | Global settings that should be inherited by all Windows boot loader applications. |
| 4636856e-540f-4170-a130-a84776f4c654 | Global debugger settings that can be inherited by any boot application. |
| 0ce4991b-e6b3-4b16-b23c-5e0d9250e5d9 | Global Emergency Management Services settings that can be inherited by any boot application. |
| 7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e | Global settings that should be inherited by all boot applications. |
| 1afa9c49-16ab-4a5c-901b-212802da9460 | Global settings that should be inherited by all resume applications. |
Bcdedit /export c:\bcd.bak(导出BCD数据库的内容到c:\bcd.bak文件中)
Bcdedit /import c:\bcd.bak(导入c:\bcd.bak文件的内容到Bcd数据库中)
bcdedit /createstore <filename>
Bcdedit /createstore C:\DATA\BCD
指定要使用的存储。
bcdedit /store <filename>
此选项不能与 /createstore、/import 和 /export 命令一起使用。
bcdedit /store c:\RemoteInstall\Boot\x86\default.bcd /set {bootmgr} timeout 10
将c:\RemoteInstall\Boot\x86\default.bcd存储中启动管理器选择默认项以前等待的时间设置10秒
5、/copy
bcdedit /copy {current} /d "copy of current"
已将该项成功复制到 {fbc1dbf9-8bfe-11de-bb65-000c297cc8af}。
bcdedit [/store <filename>] /delete <id> [/f] [/cleanup | /nocleanup]
<filename> 指定要使用的存储。如果未指定此选项,则使用系统存储。
<id> 指定要删除的启动项的标识符。
/f 删除指定的项。如果没有此选项,则 Bcdedit 将无法删除任何具有已知标识符的项。
/cleanup 删除指定的项,并从显示顺序中删除该项。并将从存储中删除任何其他涉及到所删除项的项目。删除 OS 加载器项时,如果任何其他 OS 加载器没有引用该项,还将删除从休眠中恢复的关联项。如果未指定 /nocleanup,则认为使用此选项。
/nocleanup 删除指定的项,但不从显示顺序中删除该项。
下列命令删除存储中指定的操作系统项,并从显示顺序中删除该项:
bcdedit /delete {fbc1dbf9-8bfe-11de-bb65-000c297cc8af}
下列命令删除存储中指定的操作系统项,并从显示顺序中删除该项:
bcdedit /delete {fbc1dbf9-8bfe-11de-bb65-000c297cc8af} /cleanup
下列命令删除存储中指定的操作系统项,但不从显示顺序中删除该项:
bcdedit /delete {fbc1dbf9-8bfe-11de-bb65-000c297cc8af} /nocleanup
下列命令删除存储中基于 NTLDR 的 OS 加载器项:
bcdedit /delete {ntldr} /f
bcdedit /set {default} device partition=C:
下列命令将操作系统设备设置到 VHD 文件(C:\vdisks\vdisk01.vhd)
bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} osdevice vhd=[C:]\vdisks\disk01.vhd
下列命令将应用程序路径设置到 \windows\system32\winload.exe
bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} path \windows\system32\winload.exe
bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} vga yes
下列命令将{ntldr}启动描述设置为"启动Windows XP"
bcdedit /set {ntldr} description "启动Windows XP"
bcdedit /deletue {cbd971bf-b7b8-4885-951a-fa03044f5d71} vga
9、显示Windows 7和Windows 2008 r2隐藏的BCD项目() 用BCDedit显示BCD数据库的内容,复制recoverysequence的GUID:{05ef5750-78da-11de-9f1a-fc76848d1136}(如前图)
接着输入以下命令bcdedit /displayorder {05ef5750-78da-11de-9f1a-fc76848d1136} /addfirst
然后输入bcdedit /v会发现显示内容多了一项。重启Windows 7时就会在开机菜单中出现Ramdisk Options选项,这是Windows7集成的Windows Recovery Environment,该选项在系统修复/恢复是非常有用。
由于上图中的启动项目其实是调用C:\Recovery\05ef5750-78da-11de-9f1a-fc76848d11
36\Winre.wim文件,所以我们可以用一个更为强大系统恢复文件替换这个文件(如DaRT6.0, 这一篇博文中介绍了DaRT6.0光盘的生成方法,我们可以将这个ISO文件中的sources\boot.wim复制为C:\Recovery\05ef5750-78da-11de-9f1a-fc76848d11
36\Winre.wim。),这样Windows Recovery Environment的功能会更为强大!!!
10、使用truncatememory排除损坏的内存单元 bcdedit /set {fbc1dbf9-8bfe-11de-bb65-000c297cc8af} truncatememory 536870912
设置{fbc1dbf9-8bfe-11de-bb65-000c297cc8af}以小于536870912内存来启动系统。这样可以用来测试内存出现故障的范围,同时可以用来进午软件测试。
在一个多系统的环境,往往由于一些原因,会造成造成系统启动选择菜单不全或者有误,此时我们需要手动添加系统菜单项。
bcdedit /create {ntldr} /d "Microsoft Windows XP"
bcdedit /set {ntldr} device partition=C:
bcdedit /set {ntldr} path \ntldr
bcdedit /displayorder {ntldr} /addfirst
set id={cbd971bf-b7b8-4885-951a-fa03044f5d71}
bcdedit /create %id% /d "Windows 7" /application osloader
bcdedit /set %id% locale zh-cn
bcdedit /set %id% device partition=C:
bcdedit /set %id% osdevice partition=C:
bcdedit /set %id% path \Windows\system32\winload.exe
bcdedit /set %id% inherit {bootloadersettings}
bcdedit /set %id% systemroot \windows
bcdedit /set %id% nx OptOut
bcdedit /displayorder %id% /addfirst
本文转自ycrsjxy51CTO博客,原文链接:http://blog.51cto.com/ycrsjxy/202948 ,如需转载请自行联系原作者