Boot Configuration Data (BCD)

Windows Vista has brought with it some very visible change to the earliest part of the Windows startup sequence. Immediately noticeable is “What happened to the boot.ini file?”, which is how Microsoft puts it in Windows Help and Support. On a computer with Windows Vista as the only operating system installed on the hard disk, there is indeed no BOOT.INI file. On a computer with earlier versions of Windows also installed, the BOOT.INI file remains but has no entries for Windows Vista.

Unfortunately, anything that might count as much of an answer to “What happened to the boot.ini file?” is deemed more than Microsoft thinks you need be told just from what is installed with Windows on the local hard disk. You are told that “the boot.ini file has been replaced with Boot Configuration Data (BCD)” and that changes can be made with “the command line tool Bcdedit”, but for information about this tool, you are directed to go to Microsoft’s website and search for it. Let me make that plain. You are not given a link straight to a BCDEDIT Reference such as Microsoft might have included with Windows except that space was tight and your topic of interest was judged a bit obscure. No, you are told that if you really want it, then see if you can find it.

Removal of detail in favour of looking it up on the web may be a sign of the times, but it’s not as if the on-line reference material that turns up from the recommended search is anyway much to speak of. It’s perhaps also a sign of the times that Microsoft presents a Boot Configuration Data Frequently Asked Questions (FAQ) apparently before, or even instead of, a Boot Configuration Data Reference. Can it really be that whoever wrote “BCDEdit.exe … replaces Bootcfg.exe in Windows Vista” for the FAQ did not wonder that Windows Vista does not provide instructions for BCDEDIT as accessibly as did Windows XP for BOOTCFG.

At least as concerns ordinary users, by far the most detail that Microsoft provides of the new boot options and of how to edit them is in the text that results from running the BCDEDIT tool with various forms of its /? (or /help) switch. Run bcdedit /? topics to get a list of many other ways to run BCDEDIT for “detailed command and option information”. Run all of those, collecting their output into a text file, and although it’s a strikingly clumsy way to get the information, you will then have what seems to be the closest that Microsoft comes to providing you with a ready reference for what startup options are supported for your computer and for how to edit them.

Things are not very much better for expert users and programmers. For instance, where Microsoft’s package of Debugging Tools for Windows, version 6.6.7.5, as supplied with both the Software Development Kit (SDK) for Windows Vista and the contemporaneous Windows Driver Development Kit (WDK), talks of configuring for kernel-mode debugging, only one (brief) page is specifically for Boot Options in Windows Vista, and this anyway misdirects that “BCDEdit is documented in Windows Help and Support”. This might be just an artefact of the debugging tools having been prepared ahead of Windows Vista, but the error persists in the slightly different edition of this page in the WDK itself, and in the on-line version Boot Options in Windows Vista (today, 1st June 2007).

It’s hard to escape that there has been a systemic failure in presenting the BCD options and the BCDEDIT tool as fully formed. For instance, nowhere does Microsoft seem to document the BCD options in a list of their own. Microsoft’s preference is instead to list BOOT.INI options and show how these are now replaced by BCD options. To some extent, this is entirely natural. Though Microsoft doesn’t seem to say so anywhere, the re-engineering of boot options for Windows Vista applies only as far as kernel initialisation. When WINLOAD.EXE transfers execution to the kernel, it passes the applicable boot options to the kernel as a character string in the style of BOOT.INI switches. The user may work with BCD options, but that’s just a front-end. What counts for the kernel are the BOOT.INI switches, even though they are no longer read from a BOOT.INI file. The heavier weighting that the product documentation gives to BOOT.INI switches in comparison with BCD options just reflects that the kernel, being large and important, dominates how the product is thought about.