Vista boot menu

I’ve been dual-booting between Windows XP and Windows Vista for a while, so the boot menu gave two choices:

  • Earlier Version of Windows
  • Microsoft Windows Vista

I decided that it would be a bit neater if the first option referred to Windows XP specifically. In Windows 2000/XP, this information was stored in a “boot.ini” file, so you could modify it with a text editor as long as you were careful. However, it’s now stored in a binary file, a bit like the registry hive. Steve Lamb posted an entry about this recently, recommending the (free) application VistaBootPRO. That program does look quite user friendly, but since I’m getting ready for my Vista exam I decided that I’d be better off figuring out how to change the display name with the built-in tools.

The key program here is called BCDEdit – Boot Configuration Data Store Editor. You can find out more about BCD on the Microsoft website. This is a command line tool which requires local admin privileges, i.e. you need to right-click on the “Command Prompt” shortcut and choose “Run as administrator”.

I initially tried doing this in PowerShell, but it didn’t work properly, so I guess there’s some kind of compatibility problem there. I’ll document the steps involved anyway, but you can skip over the first couple if you just want the actual solution.

At the PowerShell prompt, I ran: bcdedit /enum
In fact, this is equivalent to just running bcdedit, since /enum is the default parameter. Anyway, this returned the following results:

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=D:
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {30dbaf2f-044d-11dc-aa2a-9fc62daf5557}
displayorder            {ntldr}
                        {current}
                        {8939b9e8-044a-11dc-9b60-cc17350fcf56}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Legacy OS Loader
------------------------
identifier              {ntldr}
device                  partition=D:
path                    ntldr
description             Earlier Version of Windows

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    Windowssystem32winload.exe
description             Microsoft Windows Vista
locale                  en-US
inherit                 {bootloadersettings}
osdevice                partition=C:
systemroot              Windows
resumeobject            {30dbaf2f-044d-11dc-aa2a-9fc62daf5557}
nx                      OptIn

The GUIDs and drive letters will probably vary between machines, but this should give you the basic idea.

I then tried to change the description:

bcdedit /set {ntldr} description "Microsoft Windows XP"

Unfortunately, this just resulted in an error message:

The set command specified is not valid.
Run "bcdedit /?" for command line assistance.

This seemed a bit odd, but I guessed that the {ntldr} bit was the problem. So, I then ran bcdedit /enum /v to get a more verbose listing. This replaced certain keywords with GUIDs:

Windows Boot Manager
--------------------
identifier              {9dea862c-5cdd-4e70-acc1-f32b344d4795}
device                  partition=D:
description             Windows Boot Manager
locale                  en-US
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
default                 {30dbaf2e-044d-11dc-aa2a-9fc62daf5557}
resumeobject            {30dbaf2f-044d-11dc-aa2a-9fc62daf5557}
displayorder            {466f5a88-0af2-4f76-9038-095b170dc21c}
                        {30dbaf2e-044d-11dc-aa2a-9fc62daf5557}
                        {8939b9e8-044a-11dc-9b60-cc17350fcf56}
toolsdisplayorder       {b2721d73-1db4-4c62-bf78-c548a880142d}
timeout                 30

Windows Legacy OS Loader
------------------------
identifier              {466f5a88-0af2-4f76-9038-095b170dc21c}
device                  partition=D:
path                    ntldr
description             Earlier Version of Windows

Windows Boot Loader
-------------------
identifier              {30dbaf2e-044d-11dc-aa2a-9fc62daf5557}
device                  partition=C:
path                    Windowssystem32winload.exe
description             Microsoft Windows Vista
locale                  en-US
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
osdevice                partition=C:
systemroot              Windows
resumeobject            {30dbaf2f-044d-11dc-aa2a-9fc62daf5557}
nx                      OptIn

I then tried again, using the GUID from the “Windows Legacy OS Loader” section:

bcdedit /set {466f5a88-0af2-4f76-9038-095b170dc21c} description "Microsoft Windows XP"

However, this didn’t work either:

Bad numeric constant: 466f5a88.
At line:1 char:22
+ bcdedit /set {466f5a88 <<<< -0af2-4f76-9038-095b170dc21c} description "Microsoft Windows XP"

At this point I abandoned PowerShell and tried the standard Command Prompt instead. This worked much better, so either version of bcdedit /set [...] returned the same result:
The operation completed successfully.

I was then able to run bcdedit /enum again, and this showed that the description for the legacy OS had changed. Relevant excerpt:

Windows Legacy OS Loader
------------------------
identifier              {ntldr}
device                  partition=D:
path                    ntldr
description             Microsoft Windows XP

I then rebooted and confirmed that the boot menu now displays the names of both operating systems. So, it was a bit fiddly, but I got there in the end, and I think it’s useful to know how to use the built-in tools.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.