Windows驱动
+ -

启动配置数据(BCD)存储

2021-07-01 197 0

启动配置数据为控制启动环境数据提供了一个独立于固件的机制。Windows Vista及以后版本的Windows都使用BCD加载操作系统或运行启动环境应用程序(如memtest.exe – 内存诊断)。BCD影响系统启动的所有方面。
BCD的数据存储是一个注册表配置单元格式的二进制文件,但不能使用注册表API访问。

BCD体系结构

BCD的体系结构是一个由三个基本组件构成的层次结构:存储、对象、元素。
BCD存储是层次结构中的顶层组件,BCD存储是BCD对象和元素的命名空间容器(namespace container)。
BCD对象是BCD元素的容器。常见BCD对象的类型描述启动环境应用程序,如Windows启动加载器(boot loader)的一个实例
BCD元素是一个数据项,如一个调试程序设置、一个启动环境应用程序名称或一个操作系统设置。

BCD存储

BCD存储是保存加载Windows或运行其他启动环境应用程序所需信息的BCD对象和元素的命名空间容器(namespace container)。计算机有一个描述所有安装的Windows操作系统和安装的Windows启动环境应用程序的系统BCD存储,除了系统BCD存储之外,还可以有多个非系统BCD存储

  • 系统BCD存储文件夹名为bcd,位于活动分区的\boot文件夹
  • Windows启动管理器(Windows Boot Manager – bootmgr)使用系统BCD存储来控制启动过程。在多重启动环境中,Windows启动管理器使用来自系统BCD存储的信息显示启动选择菜单
  • BCD有两个接口:BCD WMI提供程序和BCDEdit.exe
  • 管理员、技术支持人员能够使用BCDEdit.exe或BCD WMI创建额外的BCD存储,额外的BCD存储对于恢复、修复、捕获映像很有帮助,而且可以将非系统BCD存储导入为系统BCD存储

下图显示了一个典型BCD存储中BCD的层次

BCD存储中BCD的层次

系统BCD存储中至少包含两个BCD对象:
1、Windows boot manager对象:Windows boot manager对象包含与Windows启动管理器相关的BCD元素,这些BCD元素包括显示在操作系统选择菜单、启动工具选择菜单中的启动项、选择菜单显示时间……。在使用BCDEdit修改一个BCD存储时,可以使用别名{bootmgr}

2、Windows boot loader对象:对于安装到计算机上的每个版本或配置的Windows,在BCD存储中都有一个Windows boot loader对象的实例。Windows boot loader对象包含加载Windows或Windows初始化时使用的BCD元素,这些BCD元素包括no-execute(NX)页面保护策略、物理地址扩展(Physical Address Extension – PAE)策略、内核调试程序设置……。当计算机启动到Windows时,新联的Windows boot loader对象实例由别名{current}标识。当使用BCDEdit修改BCD存储时,默认的Windows boot loader对象由别名{default}标识系统BCD存储中也可能包含下列BCD对象:

  • Windows NTLDR对象:NTLDR对象描述以前版本Windows启动加载器(Ntldr.exe)的位置,Ntldr.exe用于启动以前版本的基于NT内核的Windows。只有计算机中安装了以前版本的Windows时才需要NTLDR对象。NTLDR对象的别名为{ntldr}
  • 启动环境应用程序:BCD存储能够包含执行其他与启动相关操作的BCD对象,如Windows Memory Tester(进行内存诊断)

BCD对象

有三类BCD对象:application对象、inheritable对象、device对象。最常见的对象类型是application对象,application对象描述启动环境应用程序,如Windows启动管理器、Windows启动加载器。每个BCD对象由一个128位的全局唯一标识符(GUID)标识。

Application对象

一个application对象代表一个启动环境应用程序。标准application对象包括:

  • Windows boot manager对象 – {bootmgr}
  • Windows boot loader对象 – {current} {default}
  • Windows NTLDR对象 – {ntldr}
  • Windows resume loader对象
  • Windows Memory Tester对象 – {memdiag}

Inheritable对象

一些BCD元素能够应用于多个application元素,有些BCD元素对BCD存储是全局性的。虽然能够将这些元素分别与使用它们的每个对象实例分别关联,但更有效的方法是创建一个inheritable对象,作为在多个BCD对象实例之间共享的元素的容器。其他对象在使用这些BCD元素时,只需要引用inheritable对象,而不是每个元素,即inheritable对象包含能够应用于多个对象的元素。
Inheritable对象只能包含应用于所有启动环境应用程序的BCD元素。

下面是一些常用的inheritable对象:

  • 全局RAM错误列表,能够被所有启动环境应用程序继承 – {badmemory}
  • 启动加载器全局设置,应当被所有Windows boot loader应用程序继承 – {bootloadersettings}
  • 全局调试程序设置,能够被所有启动环境应用程序继承 – {dgbsettings}
  • 全局紧急管理服务(Emergency Management Services – EMS)设置,能够被所有启动环境应用程序继承 – {emssettings}
  • 全局设置,应当被所有启动环境应用程序继承 – {globalsettings}
  • 恢复加载器全局设置,应当被所有恢复应用程序继承 – {resumeloadersettings}

Device对象

Device对象描述没有存储在一个application对象中的设备特定的属性。
大多数设备,如硬盘分区,能够由一个BCD元素描述,但复杂的设备需要多个BCD元素来描述。
例如,当从一个Windows映像(WIM)文件创建的RAM磁盘启动时,就需要device对象,此device对象包含WIM文件的位置,如果是从网络启动的,此device对象还包含网络端口信息。RAM磁盘对象的别名为{ramdiskoptions}
可以创建自定义的device对象。

BCD元素

BCD元素是启动环境应用程序或Windows启动过程中的配置数据。
一些BCD元素只能与特定BCD对象关联,有些BCD元素能够应用于所有类型的启动环境应用程序。

总结

BCD存储由一系列对象组件,每个对象是一个启动环境应用程序,每个对象对应一个启动项。每个对象由一系列元素组成,每个元素有一个属性。
简单地说,可以将BCD元素理解成BCD对象的属性。

管理BCD的工具

  • BCDEdit.exe
  • BCD WMI API
  • 控制面板 - 系统,允许用户指定两个全局BCD元素的值:默认操作系统和配置、启动管理器超时设置
  • Msconfig.exe

0 篇笔记 写笔记

启动配置数据(BCD)存储
启动配置数据为控制启动环境数据提供了一个独立于固件的机制。Windows Vista及以后版本的Windows都使用BCD加载操作系统或运行启动环境应用程序(如memtest.exe – 内存诊断)。BCD影响系统启动的所有方面。BCD的数据存储是一个注册表配置单元格式的二进制文件,但不能使用注册表......
BCD和十进制转换
BCD码就是以四位二进制数为一个单位来表示相应的十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的十个数。BCD码:用4位二进制数来表示1位十进制数。 逢九进一static uint8_t BCD2DEC(uint8_t bcd) { return ......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!