当前位置:文档之家› 引导配置数据BCD

引导配置数据BCD

引导配置数据BCD(Boot Configuration Data)(2010-12-14 17:40:00)转载标签: bcd 分类: IT
在Windows Vista里Microsoft引入了很多新的特性,其中就包括新的引导模式。



Windows 引导方式的变迁

对一台计算机来说,操作系统的启动是很关键的一个步骤,如果操作系统不能正常启动,那么计算机只能算是一堆废铁。对于目前占据了大量桌面计算机市场领域的 Microsoft Windows操作系统来说,其能否正常启动会影响所有使用Microsoft Windows操作系统的用户。Windows的引导方式前后经历过多次的变动,基本上是每换一代Windows操作系统,Windows的启动方式均要发生一次变动。Windows Vista 作为第6代Windows操作系统的开路先锋,其启动方式再次发生了变动。

在Windows Vista里,无论是早期的从纯DOS模式下引导还是现在Windows 2000/XP/Server 2003采用的ntldr+https://www.doczj.com/doc/126830193.html, 的引导方式,均被抛弃了。一种被称为Boot Manager的组件取代了ntldr+https://www.doczj.com/doc/126830193.html, 的引导方式,成为Microsoft在Windows Vista里采用的引导方式。

当Vista启动计算机的时候,首先是BIOS开始运行,BIOS从启动设备里读取主引导扇区(MBR)的记录,然后把控制交给储存在MBR里的启动代码,接着Boot Manager启动并从Boot Configuration Data (BCD)读取启动项目信息并把这些信息显示在屏幕上,等待用户选择。当用户选择了一个启动项目后,Boot Manager根据用户的选择,从BCD获取相关的启动参数和配置信息,然后开始系统的引导过程。

对于安装了Vista的机器,Microsoft将修改被激活的主分区的启动扇区(Windows安装程序将在磁盘的第一个扇区写入MBR内容),使用新的启动扇区内容替代原有的启动扇区的内容。经典的错误提示信息:“Ntldr is missing”将被“Bootmgr is missing” 所取代。

BCD的解释

前面提到Vista新引入了一个启动组件:Boot Manager,Boot Manager将负责操作系统的初始化引导工作,与之相配的还有一个数据储存库:Boot Configuration Data,简称BCD。

BCD含有Windows操作系统的启动参数配置信息以及控制如何启动Vista以及Windows Server? Code Name "Longhorn" 的所有信息。在采用BCD之前,这些信息是储存在Boot.ini文件(基于BIOS操作系统)或者非易失性内存里面的(基于EFI的操作系统)。 Vista把所有这些信息将储存在BCD里。

当安装完成Boot Manager以后,Windows 安装程序将把BCD数据存放到活动分区的根目录下一个叫Boot的目录里,通常情况下是 C:\Boot 目录。在这个Boot目录里,Windows 安装程序将创建一个没有扩展名的、叫做 BCD 的文件。

这个BCD文件就是整个BCD数据库。在Vista运行的时候,这个文件是不能被删除或者改名的,这是因为系统一

直占用它。如果将这个文件删除,且已经安装了Boot Manager,那么系统将不能启动,因为Boot Manger无法找到合适的BCD数据文件供其使用。

如果需要修改 BCD 数据内容,可以有以下一些方法使用:



1.使用系统属性里面高级选项进行修改。在Windows 2000/XP/Server 2003里可以通过系统属性里的高级选项来修改启动方式。由于Vista所有的启动信息均是保存在BCD数据库里的,因此当使用系统属性里的高级选项对启动参数修改的时候,实际上修改的就是BCD数据库内容。

2.使用Vista自带的专用BCD修改工具:bcdedit.exe进行修改。Bcdedit.exe 基本上涵盖了所有的BCD项目的操作内容,不仅仅是编辑、删除,而且可以创建,复制等。

3.使用 msconfig.exe。由于在Vista里,所有的启动信息均是保存在BCD数据库里的,因此当使用msconfig.exe对Vista启动参数进行修改时,实际上修改的就是BCD数据库内容,因此也可以使用msconfig.exe对BCD数据库进行修改和配置。

4.使用第三方工具进行修改。通过使用Vista提供的BCD WMI接口,也可以对BCD数据库进行修改和配置。



以上四点是Microsoft推荐的修改方法,除此之外还有一种比较暴力的、需要对BCD有相当熟悉的人才能够运用自如的方法并没有被提及,因为这种方法过于危险,因此不建议使用。除非碰到了不得不为之的情况。



解密BCD

如前所述,BCD数据库文件储存于C:\Boot\BCD文件里,这个文件有什么特别呢?

Windows 2000/XP/Server 2003的引导信息配置文件是一个INI文件,而INI文件是以纯文本方式存放的,使用任何的文本编辑器均可以编辑它。方便的操作也会给系统安全带来一些隐患,任何计算机病毒或者恶意程序均可以改写Boot.ini文件,让用户系统启动时变得不太一样。好在目前没有听说过这种计算机病毒的大规模流行。这一点在Vista里得到了一点小小的改变,也许这种改变是和安全无关的,但是这一点小小的改变就足以提高了非法修改启动引导方式的难度,这是启动信息不再以纯文本的方式存放,而是储存在一个有格式的文件里,这个文件就是前面所述的BCD。

要对BCD进行解密,就必须研究它的文件格式,使用任何的16进制编辑工具打开C:\Boot\BCD文件,在00-03字节处,会看到一个非常明显的标志字符串:regf。

熟悉注册表的人都知道,在Windows 2000/XP/Server 2003里,任何注册表键(无论是子键还是根键)均可以导出成一个hive文件,另外Windows API函数RegSaveKey() 以及 RegSaveKeyEx() 函数也可以通过软件开发的方式将注册表导出为一个hive文件。如果研究过Windows注册表的hive文件就会知道,导出来的hive文件的

前4个字节一定是“regf”。Windows Vista的BCD文件,本质上就是一个注册表的hive文件,因此我们可以使用注册表编辑器直接对它进行修改,而绕过BCDEdit.exe或其他工具。前提是需要对BCD文件的文件结构非常熟悉。

运行regedit.exe,打开注册表编辑器。然后定位到 HKEY_LOCAL_MACHINE\BCD00000000 键,把这个键展开以后,就可以看到完整的BCD文件的内容。这是因为Vista已经把BCD文件加载到系统的HKEY_LOCAL_MACHINE根键下面了。

关于BCD文件,需要关注的内容只有Objects下的内容,在Objects下,有很多以CLSID命名的子键,每一个子键均有其特殊的含义,对于 Windows启动来说,启动项目的子键总是成对出现的。{50c73d4c-e6b3-11da-bc73-d30cdb1ce216}和 {50c73d4d-e6b3-11da-bc73-d30cdb1ce216}就是一对。唯一的差别只在于第一个段的最后一个字符不同,其余的内容完全相同。Vista的Boot Manager将根据CLSID来识别不同的启动项目。

相关主题
文本预览
相关文档 最新文档