admin管理员组

文章数量:1530517

2024年7月31日发(作者:)

Windows Server 2008 R2 之十九Bcdedit的使用

从Windows Vista开始,无论是早期的从纯 DOS 模式下引导还是现在 Windows

2000/XP/Server 2003

采用的 NTLDR + 的引导方式,均被抛弃了。一种被称为 Boot Manager

的组件取代了NTLDR + 的引导方式, 成为 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:bootbcd中;但在windows

7和Windows 2008 r2中系统分区被隐藏起来(安装时系统会划分200M的系统分区,用来

存放引导文件),需通过“磁盘管理(”),对系统分区执行“更改驱动器号和路径”,

分配盘符,才能访问。

一、BCD数据库文件的内容

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 里面,引导程序已经改为

22000002节点用于指定 Windows安装以后的系统目录的名字,默认是 Windows 目录。

如果休眠模式,那么 22000002 节点用于指向休眠文件的文件名,默认是 文件。

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 内存诊断项目的注册表键值

注意要用修改注册表键值,必须首先修改权限。

二、编辑BCD数据库的方法

1、使用系统属性里面高级选项进行修改

2、进行修改

3、

4、使用第三方工具进行修改(如VistaBootPRO)

三、的操作方法

相比对其它的几种方法,利用来编辑管理BCD数据库功能更加强,更灵活,同

时也操作起来也更为复杂。在以前的博文使用 Windows 7 VHD启动计算机和在VHD文件

上安装Windows 7或Windows 2008 R2也曾介绍过这个命令行工具。

1、显示BCD数据库的内容

Bcdedit

或Bcdedit /v,完整显示数据库的内容,此时数据库有些参数的值显示为该值的GUID。在

上图启动管理器inhert为gobalsettings,用Bcdedit /v显示时,它的值变成了它的GUID。

注意,当在数据库增加一启动菜单项,系统会随机产生一个GUID。但系统中有些GUID

是固定的。如下

标识

Windows Boot Manager

Firmware Boot Manager

Windows Memory Tester

Windows Resume

Application

ID

{bootmgr}

GUID

9dea862c-5cdd-4e70-acc1f32b344d4795

{fwbootmgr} a5a30fa2-3d06-4e9f-b5f4a01df9d1fcba

{memdiag}

No alias

b2721d73-1db4-4c62-bf78c548a880142d

147aa509-0358-4473-b83bd950dda00615

标识

Legacy Windows Loader

Current boot entry

ID

{ntldr}

{current}

GUID

466f5a88-0af2-4f769038095b170dc21c

fa926493-6f1c-4193-a41458f0b2456d1e

BCDEdit ID

{badmemory}

GUID Description

5189b25c-5558-4bf2-bca4-289b11bd29Global RAM

e2 defect list

that can be

inherited by

any boot

application.

{bootloadersettings} 6efb52bf-1766-41db-a6b3-0ee5eff72bGlobal

d7 settings that

should be

inherited by

all Windows

boot loader

applications

.

{dbgsettings} 4636856e-540f-4170-a130-a84776f4c6Global

54 debugger

settings that

can be

inherited by

any boot

application.

{emssettings} 0ce4991b-e6b3-4b16-b23c-5e0d9250e5Global

BCDEdit ID GUID

d9

Description

Emergency

Management

Services

settings that

can be

inherited by

any boot

application.

{globalsettings} 7ea2e1ac-2e61-4728-aaa3-896d9d0a9fGlobal

0e settings that

should be

inherited by

all boot

applications

.

{resumeloadersettings1afa9c49-16ab-4a5c-901b-212802da94Global

} 60 settings that

should be

inherited by

all resume

applications

.

2、/export /import

导出/导入BCD数据库

可以利用导出/导入对BCD数据库进行备份和还原。

Bcdedit /export c:(导出BCD数据库的内容到c:文件中)

Bcdedit /import c:(导入c:文件的内容到Bcd数据库中)

3、/createstore

新建空的启动配置数据存储

bcdedit /createstore

创建的存储不是系统存储。

Bcdedit /createstore C:DATABCD

4、/store

指定要使用的存储。

bcdedit /store

此选项不能与 /createstore、/import 和 /export 命令一起使用。

示例:

bcdedit /store c: /set {bootmgr} timeout 10

将c:存储中启动管理器选择默认项以前等待的时间设置

10秒

5、/copy

创建指定启动项的副本

bcdedit /copy {current} /d "copy of current"

已将该项成功复制到 {fbc1dbf9-8bfe-11de-bb65-000c297cc8af}。

6、/delete

删除启动配置数据存储中的项。

bcdedit [/store ] /delete [/f] [/cleanup | /nocleanup]

指定要使用的存储。如果未指定此选项,则使用系统存储。

指定要删除的启动项的标识符。

/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

7、/set

设置引导配置数据存储中的项选项值。

Bcdedit /set

下列命令将应用程序设备设置到 C: 分区:

bcdedit /set {default} device partition=C:

下列命令将操作系统设备设置到 VHD 文件(C:)

bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} osdevice vhd=[C:]

下列命令将应用程序路径设置到

bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71}

path

下列命令将 NX 策略设置到 OptIn。

bcdedit /set nx optin

下列命令设置成以VGA启动

bcdedit /set {cbd971bf-b7b8-4885-951a-fa03044f5d71} vga yes

下列命令将{ntldr}启动描述设置为"启动Windows XP"

bcdedit /set {ntldr} description "启动Windows XP"

8、/deletue

从启动配置数据存储的项中删除数据元素

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:Recovery05ef5750-78da-11de-9f1a-fc76848d11

文件,所以我们可以用一个更为强大系统恢复文件替换这个文件(如DaRT6.0,

Diagnostics and Recovery Toolset的使用这一篇博文中介绍了DaRT6.0光盘的生成方法,我

们可以将这个ISO文件中的复制为

C:Recovery05ef5750-78da-11de-9f1a-fc76848d11

。),这样Windows Recovery Environment的功能会更为强大!!!

10、使用truncatememory排除损坏的内存单元

bcdedit /set {fbc1dbf9-8bfe-11de-bb65-000c297cc8af} truncatememory 536870912

设置{fbc1dbf9-8bfe-11de-bb65-000c297cc8af}以小于536870912内存来启动系统。这样可以

用来测试内存出现故障的范围,同时可以用来进午软件测试。

11、快速添加系统菜单

在一个多系统的环境,往往由于一些原因,会造成造成系统启动选择菜单不全或者有误,

此时我们需要手动添加系统菜单项。

假设Windows XP系统安装在C盘

bcdedit /create {ntldr} /d "Microsoft Windows XP"

bcdedit /set {ntldr} device partition=C:

bcdedit /set {ntldr} path ntldr

bcdedit /displayorder {ntldr} /addfirst

假设Windows 7安装在C盘

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

bcdedit /set %id% inherit {bootloadersettings}

bcdedit /set %id% systemroot windows

bcdedit /set %id% nx OptOut

bcdedit /displayorder %id% /addfirst

本文标签: 启动系统数据库删除内容