How the Boot Configuration Data Store Works
Updated: May 8, 2008
Applies To: Windows Server 2008
Microsoft has completely reengineered the boot environment for Windows Vista to address the increasing complexity and diversity of modern hardware and firmware. One aspect of this reengineering is a new firmware-independent data store that contains boot configuration data (BCD). The BCD store defines how the boot menu is configured. The store is a namespace container for BCD objects and elements that hold the information that is required to load Windows or run other boot applications. Physically, a BCD store is a binary file in the registry hive format. The file has the same file name as its corresponding .wim file. These BCD stores exist in the folder that contains the boot image (for example, RemoteInstall\Boot\<arch>\Images\boot.wim and RemoteInstall\Boot\<arch>\Images\boot.wim.bcd). For more information about BCDs, see http://go.microsoft.com/fwlink/?LinkID=110353.
The netbootMachineFilePath attribute specified on a computer object in AD DS can contain either a redirection to a different server (for a Pre-Boot Execution Environment (PXE) referral) or the path and name of a network boot program (NBP) that the client should receive. You can change the netbootMachineFilePath by using the management tools. For more information, see How to Manage Client Computers (http://go.microsoft.com/fwlink/?LinkID=115265). The following logic is used for determining which BCD store file the client should receive:
- If the netbootMachineFilePath attribute is specified, the Name Binding Protocol will look for a BCD store in the same path as the NBP that netbootMachineFilePath points to. If one exists, it will be used. For example, if netbootMachineFilePath points to \RemoteInstall\Boot\x86\test\pxeboot.com and there is a BCD store in that folder, it will be used. This enables you to specify a BCD store for each computer. To do this, first create a folder on the server as a subfolder of the RemoteInstall folder; then copy the custom BCD and NBP (for example, pxeboot.com). Finally, prestage the device and set netbootMachineFilePath to point to the custom folder on the server that was created for that device.
- If no BCD store exists in the same folder as the NBP (that netbootMachineFilePath pointed to), Windows Deployment Services will send the architecture-specific BCD store in the \Tmp folder.
The Windows Deployment Services PXE Provider (BINLSVC) creates a BCD store for each image. This process happens automatically when the Windows Deployment Services server is started and BINLSVC is initialized. BINLSVC enumerates each .wim file within the appropriate \Boot\<arch>\Images folder, and it looks for images that are marked as bootable from RAMDISK. When it finds an image, the server creates a BCD store that contains an operating system entry for the image, as long as the following are true:
- A corresponding BCD store for the image does not already exist.
- The time stamp of the .wim file is newer than the matching BCD store. This would be the case if the image metadata was updated (that is, if you renamed the image and expected the new name to be reflected in the boot menu display).
If you add or modify a boot image while the service is running, the server must be signaled that a change has occurred before it will begin the BCD creation and update process. If you use the Windows Deployment Services management tools to make changes, the changes will be picked up. But if you manually copy a file, the changes will not be automatically picked up.
The next step in the BCD generation process is to create the BCD store that a client computer will download. To produce a BCD store that contains the required information, the information stored in Default.bcd is concatenated with the information stored in the per-image BCD stores. The following sequence of steps outlines this process.
- BINLSVC receives a signal to begin creating a BCD store. This causes the regeneration of all BCD stores for all architectures.
- The Default.bcd file is copied from the RemoteInstall\Boot\<arch> folder to the \RemoteInstall\Tmp folder.
- The boot loader options for each boot image BCD store are obtained from the per-image BCD stores (located in the \Boot\<arch>\Images folder) and then inserted into the new BCD store in the \Tmp folder.
- One boot image is marked as the default. The first alphabetic image will be the default image (unless you overwrite it). You can overwrite the default image by using the Boot tab of the server's properties in the MMC snap-in.