×

Windows中的引导配置数据(BCD)最详细参考文档

hqy hqy 发表于2024-12-26 16:35:42 浏览6 评论0

抢沙发发表评论

Windows Vista中的引导配置数据


2008年2月4日


摘要


微软已经完全重新设计了Windows Vista的引导环境,以应对现代硬件和固件日益增加的复杂性和多样性。这种重新设计的一个方面是新的独立于固件的数据存储,它包含影响引导过程的配置数据。本文概述了这种配置数据(称为引导配置数据(BCD)),并介绍了如何使用相关工具来管理引导选项。


此信息适用于Windows Vista操作系统。


本白皮书的当前版本位于以下网站:


http://www.microsoft.com/whdc/system/platform/firmware/bcd.mspx


本文末尾列出了这里讨论的参考资料和资源。


 


内容


Introduction3


BCD Overview4


BCD Architecture5


BCD Stores5


BCD Objects7


BCD Application Objects8


BCD Inheritable Objects9


BCD Device Objects10


BCD Elements11


Tools for Managing the BCD11


The Shell12


MSConfig12


BCDEdit12


How to Manage BCD Programmatically with WMI14


The BCDStore Class14


The BCDObject Class15


BCDElement Classes16


BCD Cookbook16


Kernel Debugging16


Enable Kernel Debugging16


Specify Global Debug Settings16


Specify Debug Settings for a specified Boot Entry17


Specify the Default Operating System17


Specify the Boot Manager's Timeout Value18


Manage Boot Entries18


Change a Boot Entry's Description18


Control How Boot Entries Appear to the User18


Create a New Windows Vista Boot Entry19


Delete a Boot Entry19


Enable PAE20


Create a Boot Entry to Boot a WIM from a Hard Disk21


Make a Non-system Store into the System Store21


Resources22


 


 


 


 


放弃


 


这是一份初步文档,在本文所述软件的最终商业发布之前,可能会有实质性的更改。


 


本文档中包含的信息代表了截至发布之日微软公司对所讨论问题的当前观点。因为Microsoft必须对不断变化的市场条件做出响应,所以不应将其解释为Microsoft方面的承诺,并且Microsoft不能保证在发布日期之后提供的任何信息的准确性。


 


本白皮书仅供参考。MICROSOFT对本文档中的信息不做任何明示、暗示或法定的保证。


 


遵守所有适用的版权法是用户的责任。在不限制版权权利的情况下,未经Microsoft Corporation的明确书面许可,不得以任何形式或手段(电子、机械、影印、录制或其他)或出于任何目的复制、存储或引入检索系统或传播本文档的任何部分。


 


Microsoft可能拥有涵盖本文档主题的专利、专利申请、商标、版权或其他知识产权。除非Microsoft的任何书面许可协议中明确规定,否则提供本文档并不授予您对这些专利、商标、版权或其他知识产权的任何许可。


 


除非另有说明,此处描述的示例公司、组织、产品、域名、电子邮件地址、徽标、人员、地点和事件均属虚构,无意或不应推断与任何真实的公司、组织、产品、域名、电子邮件地址、徽标、人员、地点或事件有关联。


 


2006微软公司。保留所有权利。


 


Microsoft、Visual Basic、Windows、Windows Server和Windows Vista是微软公司在美国和/或其他国家的注册商标或商标。


 


此处提及的实际公司和产品的名称可能是其各自所有者的商标。


 

文档历史


日期


变化


 


 


 


2/04/08


删除了对Longhorn的引用


5/18/2007


创造


 

介绍

当计算机启动或重新启动时,它必须加载操作系统。根据系统的硬件和固件以及系统是从磁盘驱动器、网络还是其他来源引导,此过程的细节会有所不同。


对于从硬盘引导的PC/AT BIOS计算机的常见情况,BIOS读取主引导记录(MBR)并将控制转移到MBR的代码。反过来,MBR将控制权转移给加载操作系统的代码。历史上,负责加载Windows的主要应用程序是Ntldr。


决定Ntldr如何加载Windows的数据包含在名为boot.ini的文本文件中,该文件位于启动驱动器的根文件夹中。Boot.ini为用户可用的每个Windows版本或配置包含一个单独的启动条目。如果操作系统有多种配置或版本可用,Ntldr会显示启动条目列表,以允许用户指定应该加载哪一个。然后,它继续用基于所选条目的引导选项的配置来加载所选版本的操作系统。


使用可扩展固件接口(EFI)固件的计算机的引导过程与PC/AT BIOS计算机的引导过程完全不同。EFI是下一代固件模型,充当硬件平台和操作系统之间的接口。它提供了操作系统启动所需的平台信息,有望在未来十年取代传统的BIOS。


使用EFI的计算机上的固件包含加载操作系统EFI应用程序的引导管理器,该应用程序基于存储在非易失性RAM (NVRAM)中的变量。Windows EFI操作系统加载程序根本不使用boot.ini。有关EFI的更多信息,请参见题为“EFI和Windows Vista”的白皮书


Windows Vista引入了启动配置数据(BCD)。这个新的数据存储基本上与boot.ini的目的相同。但是,BCD抽象了底层固件,并提供了一个通用的编程接口来操作所有Windows支持的计算机平台的引导环境。BCD目前支持PC/AT BIOS和EFI系统。然而,它的编程接口是可扩展和可移植的,除了这里讨论的两种之外,它还能够支持其他类型的固件。


Windows Vista引入了几个新的启动应用程序,包括:


· Bootmgr:控制引导流的系统范围的应用程序。对于多重引导系统,引导管理器会显示操作系统选择菜单。


· winload . exe:Windows Vista操作系统加载程序。安装在计算机上的Windows Vista和Windows Server 2008的每个版本都有自己的winload.exe实例。操作系统加载程序为操作系统创建执行环境,并将Windows Vista内核、硬件抽象层(HAL)和引导驱动程序加载到内存中。


· win resume . exe:Windows Vista恢复加载程序。安装在计算机上的Windows Vista和Windows Server 2008的每个版本都有自己的winresume.exe实例。当计算机从休眠状态恢复时,恢复加载程序将Windows恢复到其运行状态。


 


NTLDR仍然可以在PC/AT BIOS系统上使用,以双启动早于Windows Vista的Windows版本。


该白皮书包括:


· BCD的架构。


· 如何用系统工具管理引导环境和BCD?


· 如何通过BCD Windows Management Instrumentation(WMI)提供程序以编程方式管理启动环境和BCD。


· 这是一本“食谱”,展示了如何使用BCDEdit和BCD WMI接口进行一些常见操作。


 


碱性催化分解概述

BCD提供了一种独立于固件的机制,用于操作任何类型的Windows系统的引导环境数据。Windows Vista和更高版本的Windows将使用它来加载操作系统或运行启动应用程序,如内存诊断。一些关键特征包括:


· BCD抽象底层固件。BCD目前支持PC/AT BIOS和EFI系统。BCD接口执行所有必要的与固件的交互。例如,在EFI系统上,BCD创建并维护EFI NVRAM条目。


· BCD为引导设置提供了干净直观的结构化存储。


· BCD接口抽象底层数据存储。


· BCD在运行时和引导过程中可用。


· BCD操作需要提升权限。


· BCD旨在处理具有多种版本和配置的Windows系统,包括早于Windows Vista的版本。它还可以处理非Windows操作系统。


· BCD是Windows Vista和更高版本的Windows所需的唯一启动数据存储。BCD可以描述Ntldr和用于加载早期版本Windows的引导过程,但是这些操作系统最终是由NTLDR加载的,并且仍然必须将其引导选项存储在boot.ini文件中。


 


注:如果系统包含早期版本的Windows和Windows Vista,则应首先安装早期版本。


有两种方法可以修改BCD中包含的设置:


· 用户可以通过几个工具与BCD进行交互。可以修改的细节取决于特定的工具。


· 开发人员可以通过BCD WMI提供程序以编程方式操作BCD存储。WMI提供程序支持统一的编程接口,可用于BCD存储的本地和远程管理。该接口独立于底层固件,因此开发人员可以编写一个适用于任何类型系统的应用程序。


 


注意:BCD的数据存储是一个注册表配置单元,但是不应该使用注册表API访问该配置单元。与底层固件的交互发生在支持的BCD接口中。因此,只能通过相关工具或WMI API访问BCD库。


BCD架构

BCD体系结构是由三个基本组件组成的层次结构:存储、对象和元素。


· BCD存储是层次结构中的顶级组件。它充当构成存储内容的BCD对象和元素的命名空间容器。


· BCD对象是BCD元素的容器。最常见的BCD对象类型描述了一个引导环境应用程序,例如Windows引导加载程序的一个实例。然而,BCD对象也用于其他目的。


· BCD元素是单一数据项,如调试器设置、引导应用程序名称或操作系统设备。


 


图1是BCD层次结构的示意图。




图一。BCD层次结构


碱性催化分解商店

BCD存储是BCD对象和元素的命名空间容器,它保存加载Windows或运行其他启动应用程序所需的信息。实际上,BCD存储是注册表配置单元格式的二进制文件。计算机有一个系统BCD存储,它描述所有已安装的Windows Vista操作系统和已安装的Windows启动应用程序。一台计算机可以选择有许多非系统BCD存储。碱性催化分解商店的特点包括:


· 系统存储是一个注册表配置单元,其文件名为BCD。在PC/AT BIOS系统中,该文件位于活动分区的\boot文件夹中。在EFI系统上,该文件位于\EFI\Microsoft\Boot下的EFI系统分区(ESP)中。


· Windows启动管理器使用系统存储来控制启动流。对于多引导系统,它向用户提供一个选择菜单。


· BCD有两个接口:BCD WMI提供商和BCDedit.exe。两个接口都抽象了系统存储的位置。除非指定了特定的存储,否则BCDedit.exe对系统存储进行操作。使用BCD WMI API,系统存储由空字符串("")指定。


· 管理员或支持专业人员可以使用BCDEdit或通过BCD WMI API以编程方式创建其他BCD存储。额外的存储可用于恢复、修复和成像。


· 管理员或支持专业人员可以使用BCDEdit或WMI API来导入非系统存储作为系统存储。


 


图2显示了如何在典型的BCD存储中实现BCD层次结构的示例。


图二。典型的BCD商店


BCD存储通常至少有两个BCD对象,也可以有多个BCD对象。


· Windows启动管理器对象。此对象包含与Windows启动管理器相关的BCD元素,例如要在操作系统选择菜单、启动工具选择菜单和选择菜单超时中显示的条目。Windows启动管理器对象及其相关元素的作用与boot.ini文件的[boot loader]部分基本相同。一个存储可以有多个Windows启动管理器实例。但是,其中只有一个可以由Windows启动管理器的众所周知的全局唯一标识符(GUID)来表示。GUID的别名{bootmgr}可用于通过BCDEdit操作存储。


· 至少一个和可选的几个Windows启动加载程序对象。对于系统上安装的Windows Vista或Windows Server 2008的每个版本或配置,存储区都包含此对象的一个实例。这些对象包含在加载Windows或Windows初始化期间使用的BCD元素,如不执行(NX)页面保护策略、物理地址扩展(PAEs)策略、内核调试器设置等。每个对象及其关联元素的作用基本上与boot.ini的[operating systems]部分中的一行相同。当计算机引导到Windows Vista时,关联的引导加载程序对象由别名{current}表示。使用BCDEdit操作存储时,默认的引导加载程序对象具有别名{default}。


· 可选的Windows Ntldr对象。Ntldr对象描述Ntldr的位置,可以执行该对象来引导早期版本的Windows。只有当系统包含早于Windows Vista的Windows版本时,才需要它。描述Ntldr的对象可能有多个实例。但是,与Windows启动管理器一样,Ntldr众所周知的GUID只能表示一个实例。GUID的别名{ntldr}可用于通过BCDEdit操作存储。


· 可选的引导应用程序。存储可以选择性地包含BCD对象,用于执行其他与引导相关的操作。一个例子是运行内存诊断的Windows内存测试程序。


 


为了进行比较,图3显示了典型boot.ini文件的内容,以及boot.ini条目如何与BCD对象和元素相对应。




图3。boot.ini和BCD之间的关系


注意:图3使用了BCD对象和元素的描述性标签。实际上,它们由依赖于特定工具的名称来表示。后面给出了一些常用的名称。


BCD对象

BCD对象有三种常规类别:应用程序对象、可继承对象和设备对象。最常见的BCD对象类型是application对象,它描述了一个引导环境应用程序,如Windows引导管理器或Windows引导加载程序。每个对象由一个128位的唯一GUID表示,并包含一个描述对象类型的32位描述。


下表显示了三个对象类别的对象代码和关联的对象代码值。


对象类型


描述


价值


应用


0x1


可继承的


0x2


设备


0x3


 


图4显示了该类型的布局。如何将数据打包到位0至27的细节取决于类别。




图4。BCD对象类型的布局。


BCD应用程序对象


BCD应用程序对象代表引导环境可执行文件,如Windows引导加载程序。标准应用对象包括:


· 控制启动流的Windows启动管理器对象。在双引导系统中,Windows引导管理器向用户显示引导选择菜单。


· Windows boot loader对象,用于加载特定版本或配置的Windows Vista或更高版本的Windows。


· Windows Ntldr对象,它加载早于Windows Vista的Windows版本。


· Windows恢复加载程序对象,当计算机从休眠状态恢复时,它将Windows恢复到其运行状态。


· 运行一组内存诊断的Windows内存测试程序对象。


 


BCD应用程序对象有两个定义特征:图像类型和应用程序类型。映像类型指定如何加载可执行文件。例如,可执行文件可以通过固件或Windows引导管理器(作为引导应用程序)加载。下表列出了有效的图像类型以及相关的数值:


图像类型


描述


价值


固件应用程序


0x1


引导应用程序


0x2


基于Ntldr的加载程序对象


0x3


实模式应用


0x4


 


应用程序类型指定应用程序做什么。每个有效类型都有一个关联的代码。下表列出了标准应用程序类型及其数字代码:


应用程序类型


描述


价值


描述


固件引导管理器


0x1


仅适用于EFI系统。


Windows启动管理器


0x2


控制启动流程。在双引导系统中,向用户显示引导选择菜单。


Windows启动加载程序


0x3


加载特定版本或配置的Windows。


Windows简历应用程序


0x4


当计算机从休眠状态恢复时,将Windows还原到其运行状态。


Windows内存测试仪


0x5


内存诊断应用程序。


Ntldr


0x6


仅适用于PC/AT BIOS系统。加载早于Windows Vista的Windows版本。


引导扇区


0x8


16位实模式应用程序。仅适用于PC/AT BIOS系统。可用于重新启动引导过程和加载非Windows操作系统。


 


图5显示了一个对象类型的布局。




图5。BCD应用程序对象类型的布局


下表给出了一些常用应用程序对象的BCDEdit标识符和GUID:


标准应用程序对象


描述


BCDEdit ID


全局唯一标识符


Windows启动管理器


{bootmgr}


9de a862 c-5cdd-4e 70-ACC 1-f32b 344d 4795


固件引导管理器


{fwbootmgr}


a5a 30 fa 2-3d 06-4e9f-b5 F4-a 01f 9 D1 fcba


Windows内存测试仪


{memdiag}


b 2721d 73-1db 4-4c 62-bf78-c548a 880142d


Windows简历应用程序


没有别名


147 aa 509-0358-4473-b83b-d 950 DDA 00615


传统Windows加载程序


{ntldr}


466 F5 a88-0af 2-4f 76-9038-095 b170 DC 21 c


当前启动项目


{当前}


fa 926493-6f1c-4193-a414-58f0b 2456 D1 e


默认启动条目


{默认}


 


 


BCD可继承对象


一些BCD元素可以应用于多个BCD应用程序对象,一些元素对于整个BCD存储是全局的。可以将这些元素分别与使用它们的对象的每个实例相关联。更有效的方法是创建一个可继承的对象。这是多个BCD对象实例共享的元素的容器。例如,有可继承的对象来指定内核调试器是使用COM、USB还是1394连接。BCD对象包括包含元素的可继承对象,而不是元素本身的单独实例。


如BCD元素一节所述,BCD元素命名空间被划分,以便由两个不同的应用程序类使用的元素可以共享相同的类型代码。这意味着可继承的应用程序类对象只能与特定的BCD应用程序对象类相关联。或者,可继承的BCD对象可以只包含适用于所有引导环境应用程序的BCD元素。任何BCD应用程序类都可以包含这样的对象。这两种类型的可继承对象通过它们的类来区分。数字类别代码在括号中给出:


· 库类(0x1)。这种类型的可继承对象可以由任何BCD对象继承,并且只能包含库类BCD元素。


· 应用程序类(0x2)。这种类型的可继承对象只能由指定的BCD应用程序类继承。


 


类别代码设置为Application class的可继承对象还必须包括可包含该可继承对象的Application对象的类型。可能的值包括任何BCD应用程序对象类型,如Windows启动加载程序或Windows启动管理器。


下表给出了一些常用的可继承对象的BCDEdit标识符和GUID:


标准可继承对象


BCDEdit ID


全局唯一标识符


描述


{错误记忆}


5189 b25c-5558-4 bf2-BC a4-289 b11 BD 29 e 2


任何引导应用程序都可以继承的全局RAM缺陷列表。


{bootloadersettings}


6 efb 52 BF-1766-41db-a6b 3-0 ee 5 eff 72 BD 7


所有Windows启动加载程序应用程序都应该继承的全局设置。


{dbgsettings}


4636856 e-540 f-4170-a130-a 84776 f4c 654


任何启动应用程序都可以继承的全局调试器设置。


{emssettings}


0ce 4991 b-e6b 3-4b 16-b23c-5e0d 9250 e5d 9


任何启动应用程序都可以继承的全局紧急管理服务设置。


{全局设置}


7 ea 2e 1 AC-2e 61-4728-AAA 3-896d 9d 0 a 9 f 0e


应该由所有启动应用程序继承的全局设置。


{resumeloadersettings}


1 afa9c 49-16ab-4a5c-901 b-212802 da 9460


所有简历应用程序都应继承的全局设置。


 


继承的类型具有以下布局。值字段的内容取决于分类代码:


· 图书馆。未使用值。


· 申请。值指定可以从对象继承的应用程序的类型。它应该设置为前面列出的应用程序代码之一。


 




图6。BCD继承对象类型的布局


BCD设备对象


大多数设备,比如硬盘上的分区,可以用一个BCD元素来描述。然而,可能存在需要不止一个元件来描述的更复杂的设备。BCD设备对象是复杂设备的BCD元素的容器。


例如,从通过Windows映像(WIM)文件创建的RAM磁盘引导时,会使用BCD设备对象。设备对象包含WIM文件的位置,当通过网络引导时,还包含网络端口信息。此对象的BCDEdit标识符是{ramdiskoptions}。关联的GUID是{ AE 5534 E0-a924-466 c-b836-758539 a3 ee3a })。也可以创建自定义设备对象。


设备类型具有以下布局。




图7。BCD设备对象类型的布局


BCD元素

元素是引导环境应用程序或Windows引导过程的一部分的配置数据项。在boot.ini中,这些属性及其值被指定为引导选项。使用BCD,每一项输入数据都包含在一个单独的BCD元素中。


BCD元素包含在BCD对象中。引导环境应用程序具有BCD应用程序对象,该对象包含BCD元素以指定应用程序的配置属性。BCD应用程序对象还可以包括包含附加配置数据的可继承对象。


一些元素只能与某些对象相关联,而其他元素可以应用于任何类型的引导环境应用程序。为了管理不同类型的元素,元素名称空间分为三个类。下表显示了这些类别及其相关的数字代码。


元素类别


描述


价值


描述


图书馆


0001


元素可以应用于所有引导环境应用程序。


应用


0010


元素只能应用于特定类别的引导环境应用程序,如引导加载程序。


设备


0011


元素只能由设备对象包含。


 


BCD元素是结构化数据。下表显示了这些格式及其相关的数字代码。


元素格式


描述


价值


描述


线


0010


例如,内核调试器打开或关闭。


目标


0011


比如NX政策。


整数


0101


例如,引导菜单默认值。


布尔代数学体系的


0110


例如,操作系统加载程序的路径。


 


添加、删除或修改BCD元素的技术取决于特定的工具。


BCDEdit和BCD WMI API为标准元素提供了众所周知的名称。然而,对于定制元素类型,图8显示了布局。




图8。BCD元素类型的布局


管理BCD的工具

BCD存储是二进制格式的,只能用专门设计的工具修改。这里讨论的前两个是为普通用户设计的,提供对BCD的有限访问。BCDEdit工具是为开发人员和支持专业人员设计的。它提供了对BCD的完全访问,包括创建BCD存储的能力。管理BCD存储的最灵活和最强大的方法是通过编程,使用BCD WMI API。这个API将在本文后面讨论。


贝壳

系统控制面板应用程序允许用户为两个全局BCD元素指定值:


· 默认操作系统和配置


· 引导管理器的超时设置


 


MSConfig

MSConfig.exe主要由产品支持服务(PSS)在帮助用户进行引导设置时使用。它支持BCD,并允许用户按照显示顺序枚举加载程序类型的对象以及选定的元素。MSConfig还可以用于修改选定的元素,包括调试和安全模式设置。


BCDEdit

BCDedit是一个命令行工具,支持专业人员和开发人员可以使用它来管理BCD存储。它有多种用途,包括创建新存储、修改现有存储、添加引导菜单选项等等。BCDEdit在本质上与早期版本的Windows上的Bootcfg.exe功能相同,但有两个主要改进:


· 它暴露了比Bootcfg.exe更广泛的引导选项。


· 它改进了脚本支持。


 


注意:使用BCDEdit修改BCD需要管理权限。


BCDEdit是唯一可用于编辑Windows Vista和更高版本Windows的启动配置的启动配置编辑器。它包含在Windows Vista发行版的%WINDIR%\System32文件夹中。但是,BCDEdit也可以在早期版本的Windows上使用。Bootcfg.exe也包含在Windows Vista中,但它只能用于编辑可能也安装在计算机上的早期版本的Windows的启动配置。


BCDEdit仅限于标准数据类型,主要用于对BCD执行单一的常见更改。对于更复杂的操作或非标准的数据类型,可以考虑使用BCD WMI API来创建更强大、更灵活的定制工具。BCDEdit的命令语法很简单:


BCDEdit/Command[参数1][参数2]...


 


下面的列表给出了BCDEdit命令以及简短的描述。除非另外指定,否则默认情况下,BCDEdit对系统存储进行操作。有关如何使用BCDEdit执行常见任务的示例,请参见本文后面的“BCD指南”。有关完整的详细信息,请参见在线参考。


通用命令


· /?。显示BCDEdit命令列表。不带参数运行此命令会显示可用命令的摘要。要显示特定命令的详细帮助,请运行“bcdedit /?command”,其中command是所需命令的名称,不带前导正斜杠(/)。比如“bcdedit /?createstore”显示createstore命令的详细帮助。


 


对存储进行操作的命令


· /createstore。创建新的空引导配置数据存储。创建的存储不是系统存储。


· /导出。将系统存储的内容导出到文件中。该文件可以在以后用于恢复系统存储的状态。此命令仅对系统存储有效。


· /import。通过使用以前使用/export命令生成的备份数据文件来还原系统存储的状态。该命令在导入之前删除系统存储中的所有现有条目。此命令仅对系统存储有效。


· /商店。此选项可以与大多数BCDedit命令一起使用,以指定要使用的存储。如果未指定此选项,则BCDEdit在系统存储上运行。单独运行bcdedit /store相当于运行bcdedit /enum ACTIVE。


 


对存储中的条目进行操作的命令


· /复制。在同一系统存储中制作指定启动项目的副本。


· /创建。在引导配置数据存储中创建新条目。如果指定了众所周知的标识符,则不能指定/application、/inherit和/device选项。如果未指定标识符或标识符不为人所知,则必须指定/application、/inherit或/device选项。


· /删除。从指定条目中删除元素。


 


对条目选项进行操作的命令


· /deletevalue。从启动项目中删除指定的元素。


· /set。设置入口选项值。


 


控制输出的命令


· /enum。列出商店中的条目。/enum命令是bcdedit的默认值,因此运行不带参数的“BCDEdit”等效于运行bcdedit /enum ACTIVE。


· /v .详细模式。通常,任何众所周知的条目标识符都由它们友好的简写形式表示。将/v指定为命令行选项会完整显示所有标识符。单独运行“bcdedit /v”相当于运行bcdedit /enum ACTIVE /v。


 


控制引导管理器的命令


· /bootsequence。指定下次启动时使用的一次性显示顺序。该命令类似于/displayorder,只是它仅在下次系统启动时使用。在这之后,系统恢复到原来的显示顺序。


· /默认。指定超时过期时引导管理器选择的默认条目。


· /displayorder指定引导管理器在向用户显示引导选项时使用的显示顺序。


· /超时。指定在引导管理器选择默认条目之前等待的时间(秒)。


· /toolsdisplayorder。指定启动管理器在显示工具菜单时使用的显示顺序。


 


控制EMS的命令


· /bootems。启用或禁用指定条目的应急管理服务。


· /ems。为指定的操作系统启动项目启用或禁用紧急管理服务。


· /emssettings。为系统设置全局紧急管理服务设置。Emssettings不会为任何特定的启动条目启用或禁用紧急管理服务。


 


控制调试的命令


· /bootdebug。为指定的启动项目启用或禁用启动调试器。尽管该命令适用于任何启动条目,但它只对启动应用程序有效。


· /dbgsettings。指定或显示系统的全局调试器设置。此命令不启用或禁用内核调试器;为此,请使用/debug。若要设置单个全局调试器设置,请使用bcdedit /set {dbgsettings}类型值。


· /debug。为指定的启动项目启用或禁用内核调试器。


 


如何用WMI程序管理BCD

BCD WMI API让开发人员基本上可以完全控制商店的内容。它允许开发人员创建使用自定义引导数据的应用程序,或者对存储区进行复杂的更改,而使用BCDEdit很难或不可能做到这一点。基于WMI API的应用程序可以在本地或远程运行。


BCD WMI提供程序由一组支持以编程方式访问BCD存储的可编写脚本的类组成。这些类被公开为COM对象,这使得应用程序也可以用C++实现。尽管BCD WMI提供程序主要是为Windows Vista和更高版本的Windows编写的,但它也可以用于Microsoft Windows XP、Windows Server 2003和支持WMI的恢复环境。


本节简要概述了BCD WMI提供程序的功能。有关详细信息,请参阅MSDN图书馆中的文档。有关如何使用WMI API完成特定任务的一些示例,请参见本文后面的“BCD食谱”。


BCDStore类

BCDStore类表示BCD存储。它允许开发人员执行诸如创建存储、添加或删除对象以及将非系统存储的内容导入系统存储等任务。该对象有一个属性StoreFilePath,它包含该对象的BCD存储的完全限定路径。为方便起见,系统存储由空字符串("")表示。下表列出了对象的方法。


BCDStore方法


方法


描述


复制对象


从另一个存储区复制指定的对象。


复制对象


从另一个存储区复制指定类型的对象。


创建对象


创建指定的对象。


创建商店


创建新商店。


删除对象


删除指定的对象。


DeleteSystemStore


删除系统存储。


枚举对象


枚举指定类型的对象。


获取系统磁盘


获取系统盘。


GetSystemPartition


获取系统分区。


出口商店


将存储导出到指定文件。


ImportStore


将指定存储标记为系统存储。


OpenObject


打开指定的对象。


OpenStore


开了一家店。


 


BCDObject类

BCDObject类代表一个BCD对象。它允许开发人员执行诸如添加或删除元素或修改现有元素的值等任务。对象由GUID标识,还包含指定对象用途的类型属性。下表列出了对象的属性:


BCDObject属性


财产


描述


StoreFilePath


BCD存储的完全限定路径。系统存储由空字符串("")表示。


身份


字符串格式的对象GUID。


类型


对象的类型。


 


下表列出了对象的方法。


BCDObject方法


方法


描述


删除元素


删除指定的元素。


EnumerateElementTypes


枚举对象中的元素类型。


EnumerateElements


枚举对象中的元素。


GetElement


获取指定的元素。


SetBooleanElement


设置指定的布尔元素。


SetDeviceElement


设置指定的设备元素。


SetFileDeviceElement


设置指定的文件设备元素。


SetIntegerElement


设置指定的整数元素。


SetObjectElement


设置指定的对象元素。


SetObjectListElement


设置指定的对象列表元素。


SetPartitionDeviceElement


设置指定的分区设备元素。


SetStringElement


设置指定的字符串元素。


 


BCDElement类

许多类代表元素,每种支持的数据类型对应一个类。基类是BCDElement,它没有方法。它支持与BCDObject相同的三个属性。但是,对于BCDElement,ID属性被命名为ObjectID。下表列出了从BCDElement派生的类。


BCDElement类型和子类


方法


描述


BcdBooleanElement


包含一个布尔值。


BcdIntegerElement


包含整数元素。


BcdObjectElement


包含对象ID。


BcdObjectListElement


包含对象id列表。


BcdStringElement


包含一个字符串。


 


BCD食谱

本节包含一些关于如何使用BCDEdit执行常见任务的简短示例。它还展示了一些如何使用BCD WMI API以编程方式完成相同任务的示例。


内核调试

本节展示了如何使用BCDEdit来启用内核调试和指定调试设置。


启用内核调试


使用以下BCDEdit命令为指定的启动项目启用或禁用内核调试。


bcdedit /debug [ID] {on | off}


 


ID是与启动项目相关联的GUID。如果省略,默认情况下,BCDEdit会修改当前启动项目。要指定特定的启动项目,请将ID设置为相关GUID的字符串形式。以下示例为指定的条目启用内核调试。


bcdedit/debug { CBD 971 BF-b7b 8-4885-951 a-fa 03044 F5 d 71 } on


 


指定全局调试设置


若要全局指定调试设置,请使用以下命令。


bcdedit /dbgsettings类型设置


 


以下示例显示了如何为串行、1394和USB连接指定全局调试设置。


bcdedit /dbgsettings串行调试端口:1波特率:115200


bcdedit /dbgsettings 1394通道:32


bcdedit /dbgsettings USB目标名称:U1


 


为指定的启动项目指定调试设置


若要指定特定启动项目的调试设置,请使用BCDEdit来设置适当的元素。特定设置取决于连接类型。


bcdedit /set ID debugsetting1


bcdedit /set ID调试设置2


...


 


以下示例显示如何为指定条目的串行连接指定调试设置。


bcdedit/set { CBD 971 BF-b7b 8-4885-951 a-fa 03044 F5 d 71 }调试型系列


bcdedit/set { CBD 971 BF-b7b 8-4885-951 a-fa 03044 F5 d 71 }调试端口2


bcdedit/set { CBD 971 BF-b7b 8-4885-951 a-fa 03044 F5 d 71 } baudrate 115200


指定默认操作系统

要指定默认操作系统,请使用:


bcdedit/默认ID


 


ID是与所需操作系统相关联的Windows启动加载程序启动项目的GUID。例如:


bcdedit/default { CBD 971 BF-b7b 8-4885-951 a-fa 03044 f 5d 71 }


 


要将默认启动条目更改为legacy loader,请将ID设置为{ntldr},这是BCDEdit对与ntldr关联的GUID的熟知名称。


bcdedit /default {ntldr}


 


以下Microsoft Visual Basic脚本示例显示了如何使用BCD WMI API来指定默认操作系统。它接受一个参数,即与新的默认操作系统的启动条目相关联的GUID。


set Locator = CreateObject(" WbemScripting。SWbemLocator”)


设置服务=定位器。ConnectServer(“.”,“root\wmi”)


服务。安全_。ImpersonationLevel = 3


 


DefaultOsIdentifier = WScript。参数(0)


 


这些硬编码的值将被官方常数所取代


如有可能。


 


const BootMgrId = " { 9 dea862 c-5cdd-4e 70-a cc1-f32b 344d 4795 } "


常量默认值类型= &h23000003


'


打开到WMI BcdStore类的连接,允许


模仿。我们需要请求备份和恢复


特权也被授予。


 


set BCD store class = GetObject(" winmgmts:{ impersonation level = impersonate,(Backup,Restore)}!"& machine name & " root/wmi:BCD store ")


 


如果不是BcdStoreClass。OpenStore(",BcdStore)然后


WScript。Echo“无法打开系统存储!”


WScript。放弃


如果…就会结束


'


打开“启动管理器”对象。


'


如果不是BcdStore。OpenObject(BootMgrId,BootMgr)然后


WScript。Echo“无法打开启动管理器对象!”


WScript。放弃


如果…就会结束


'


将引导管理器的默认操作系统对象设置为指定的操作系统。


请注意,对象必须作为字符串传递。


'


如果不是BootMgr。SetObjectElement(DefaultType,DefaultOSIdentifier)然后


WScript。Echo“无法设置默认操作系统值!”


WScript。放弃


如果…就会结束


 


WScript。Echo“成功设置了启动管理器的默认操作系统值。”


 


指定引导管理器的超时值

要指定引导管理器的超时值,请使用:


bcdedit /timeout超时


 


超时以秒为单位指定值。例如,要指定15秒的超时值:


bcdedit/超时15


 


管理启动项目

本节说明如何管理BCD中的启动项目。


更改启动项目的描述


描述是在引导时显示给用户的引导条目列表中出现的文本。使用以下命令更改启动条目的描述。ID是与所需启动项目相关联的GUID。


Bcdedit /set ID描述“新描述”


 


例如:


bcdedit/set { 802 D5 e32-0784-11da-bd33-000476 EBA 25 f }描述“我最喜欢的操作系统”


控制启动项目如何向用户显示


要指定启动项目向用户显示的顺序,请运行以下命令。ID1、ID2等是与引导条目相关联的GUIDs。列表中未包含的任何启动项目都不会出现。如果只指定了一个条目,Windows启动管理器只会选择该条目,而不会显示列表。


bcdedit/display order ID1[ID2][ID3][...]


 


以下命令指定了三个启动条目:两个由GUIDS标识,Ntldr由众所周知的名称标识。


bcdedit/display order { 802 D5 e32-0784-11da-bd33-000476 EBA 25 f }


{ CBD 971 BF-b7b 8-4885-951 a-fa 03044 f 5d 71 } { ntldr }


 


以下命令将启动项目添加到当前列表的开头或结尾,或者从列表中删除项目。


bcdedit/display order ID[/add last][/add first][/remove]


 


以下示例将Ntldr条目添加到显示顺序的末尾。


bcdedit/display order { ntldr }/add last


 


也可以指定仅适用于下次重启的显示顺序。之后,BCD恢复到原来的显示顺序。使用以下命令,其中id是与启动条目相关联的GUIDs。


bcdedit/boot sequence ID1[ID2][ID3]...


 


创建新的Windows Vista启动项目


以下过程创建了一个额外的Windows Vista启动项目。例如,这允许用户对于相同版本的操作系统具有单独的正常和调试配置。


1.制作现有Windows Vista启动项目的副本,如下例所示。ID是与要复制的启动项目相关联的GUID。BCDEdit为新启动项目创建一个GUID。


Bcdedit /copy ID /d "新条目描述"


 


2.前面的命令返回与新启动项目相关联的GUID。使用GUID修改分区信息,如下例所示。NewID是新启动条目的GUID,这个示例将分区设置为“d:”。


Bcdedit /set NewID设备分区=d:


bcdedit/set NewID OS device partition = d:


 


3.将新的启动条目添加到显示顺序中。下面的示例将其添加到列表的末尾。


bcdedit/display order NewID–add last


 


4.根据需要进行任何额外的配置更改,例如启用内核调试器。


 


删除启动项目


以下命令从BCD中删除一个启动项目。ID是与启动项目相关联的GUID。


bcdedit /delete ID


 


下面的Visual Basic脚本示例显示了如何使用BCD WMI API删除启动项目。它接受一个参数,即与要删除的启动条目相关联的GUID。


set Locator = CreateObject(" WbemScripting。SWbemLocator”)


设置服务=定位器。ConnectServer(“.”,“root\wmi”)


服务。安全_。ImpersonationLevel = 3


 


if WScript。参数。那么计数< 1


WScript。Echo "用法:" & WScript。全名& " " & WScript。ScriptName & " <要删除的操作系统的GUID > "


WScript。放弃


如果…就会结束


 


TargetOS = WScript。参数(0)


 


'


在下列情况下,这些硬编码的值将被官方常量替换


可用。


'


const BootMgrId = " { 9 dea862 c-5cdd-4e 70-a cc1-f32b 344d 4795 } "


常量默认值类型= &h23000003


const DisplayOrderType = & h 24000001


 


set BCD store class = GetObject(" winmgmts:{ impersonation level = impersonate,(Backup,Restore)}!"& "root/wmi:BcdStore ")


如果不是BcdStoreClass。OpenStore(",BcdStore)然后


WScript。Echo“无法打开系统存储!”


WScript。放弃


如果…就会结束


'


打开“启动管理器”对象。


'


如果不是BcdStore。OpenObject(BootMgrId,BootMgr)然后


WScript。Echo“无法打开启动管理器对象!”


WScript。放弃


如果…就会结束


'


获取启动管理器的显示顺序列表。


'


如果不是BootMgr。GetElement(DisplayOrderType,BootOrderList)然后


WScript。Echo“无法获得显示顺序列表!”


 


其他


'


从引导顺序列表中删除目标操作系统。


'


dim NewBootOrderList()


i = 0


对于BootOrderList中的每个OSIdentifier。本能冲动


如果不是TargetOS =标识符,则


redim保留新订单列表(I)


NewBootOrderList(I)= OS identifier


i =i + 1


如果…就会结束


然后


 


如果不是BootMgr。SetObjectListElement(DisplayOrderType,NewBootOrderList)然后


WScript。Echo "无法设置新的显示顺序列表!"


WScript。放弃


如果…就会结束


如果…就会结束


'


最后,删除操作系统对象


'


如果不是BcdStore。然后删除对象(TargetOS)


WScript。Echo "无法删除目标操作系统:" & TargetOS


WScript。放弃


如果…就会结束


 


WScript。Echo "成功删除目标操作系统:" & TargetOS


 


启用PAE

以下命令为指定的启动项目启用PAE。ID是与所需启动项目相关联的GUID。如果未指定ID,BCDEdit将修改当前活动操作系统的设置。


Bcdedit /set ID PAE ForceEnable


 


例如:


bcdedit/set { 802 D5 e32-0784-11da-bd33-000476 EBA 25 f } PAE强制启用


 


创建一个引导项,从硬盘引导WIM

本节说明如何创建一个引导项来从硬盘引导WIM。它假设引导驱动器是“c:/”。boot.wim中包含wim,这是System32文件夹中带有Winload.exe的普通WIM。


1使用下面的命令集在BCD存储中创建一个ramdiskoptions对象。字符串“{ramdiskoptions}”是对象GUID的众所周知的名称。


bcdedit/create { ramdiskoptions }/d " Ramdisk选项"


bcdedit/set { ramdiskoptions } ramdisksdevice partition = c:


bcdedit/set { ramdiskoptions } ramdisksdispath \ boot \ boot . SDI


 


2.创建新的启动项目。


bcdedit -create /d "显示文本"/应用程序OSLOADER


 


3.步骤2返回与新创建的启动项目相关联的GUID。在其余示例中,它被称为NewGUID。运行以下命令集来配置启动条目。


bcdedit /set {NewGUID}设备ramdisk=[c:]\sources\boot.wim,{ramdiskoptions}


bcdedit/set { new guid } path \ windows \ system32 \ win load . exe


bcdedit/set { new guid } OS device ramdisk =[c:]\ sources \ boot . WIM,{ramdiskoptions}


bcdedit/set { new guid } systemroot \ windows


将非系统存储转换为系统存储

系统可以有任意数量的BCD存储。但是,只能有一个系统存储,它控制引导过程。/import命令用指定的非系统存储的内容替换系统存储的内容。若要保留当前系统存储的内容,请运行/export命令创建系统存储的备份副本。若要还原原始系统存储,请导入备份副本。


下列命令保存系统存储的备份副本,并将非系统存储导入系统存储。NewStoreName是包含非系统存储的文件的完全限定名,BackupStoreName是包含备份存储的文件的完全限定名。


bcdedit /export备份存储名称


bcdedit /import NewStoreName


 


下面的Visual Basic脚本示例演示如何将指定的非系统存储区导入系统存储区。它采用一个参数—将成为新系统存储的BCD存储的完全限定路径。


set Locator = CreateObject(" WbemScripting。SWbemLocator”)


设置服务=定位器。ConnectServer(“.”,“root\wmi”)


服务。安全_。ImpersonationLevel = 3


 


FilePath = WScript。参数(0)


'


检索BcdStore类对象并调用静态


在其上导入Store方法。


'


设置BcdStoreClass = Services。Get("BcdStore ")


如果不是BcdStoreClass。然后导入存储(文件路径)


WScript。Echo“无法导入系统存储!”


WScript。放弃


如果…就会结束


 


WScript。Echo“成功地从“& FilePath &”导入了系统存储”


资源

以下链接提供了有关BCD和Windows启动过程的更多信息。


MSDN:


BCD WMI参考


http://msdn2.microsoft.com/en-us/library/aa362677.aspx


引导配置数据(BCD)


http://msdn2.microsoft.com/en-us/library/aa362692.aspx


引导选项介绍


http://msdn2.microsoft.com/en-us/library/ms791478.aspx


白皮书:


EFI和Windows Vista


http://www.microsoft.com/whdc/system/platform/firmware/efibrief.mspx 作者:数奇的Tiger https://www.bilibili.com/read/cv29816493/?jump_opus=1 出处:bilibili


打赏

本文链接:https://www.kinber.cn/post/4398.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客