This page describes the configuration and properties of a correctly set-up and working Windows XP – Windows Vista dual-boot. Don’t be put-off by the title though, these same steps apply to any legacy NT-based operating system, meaning that these same steps are used (without exception) to boot into Windows 2003, XP, 2000, Neptune, and NT.
This article refers to the technical aspects of the Windows XP bootloader and provides background information needed to fully understand how to correctly dual-boot newer versions of Windows (including Vista, 7, and 8) with Windows XP.
If you’re not interested in the mechanics of the boot process and aren’t doing anything especially complicated, feel free to skip ahead to the step-by-step dual-booting instructions:
The Boot Process
Regardless of what you’re booting – and even what bootloader you are using – the basic boot process starts off in the same way. When you power on your PC, the BIOS is loaded which first detects and initializes basic hardware, then loads a small amount of binary code stored in the MBR of the primary boot disk. The MBR then loads some more binary code in the bootsector of the active partition on that same disk. The code in the bootsector is then run, which typically loads a binary file from the root of the same active partition, which typically presents the user with a menu of operating systems to boot from (assuming there is more than one) and proceeds to boot into the selected OS…. usually by loading yet another binary file which initializes the environment bringing the machine out of real mode and into protected mode with virtual memory and launches the kernel. The first part of this procedure is depicted below:
NTLDR, NTDETECT, and BOOT.INI
While the new Windows Vista/7/8 bootloader (known as bootmgr) can load Windows Vista and up directly1, it doesn’t know how to start up older versions of Windows. As a work around, Microsoft configured bootmgr to load the old NTLDR boot menu, which will then display its own list of legacy operating systems, according to boot.ini. NTLDR then loads the older version of Windows. NTLDR is stored in the root of the FAT16, FAT32, or NTFS partition set as active and primary. This 16-bit program calls up several other files that need to be in the same root directory of the single active partition on the primary boot disk that carry out of the different tasks needed to get your system up and running:
Once NTLDR has finished calling these child processes, it will display a second menu which gives you a choice of which Windows NT-based operating system to load. If there is only one such legacy entry, no menu will be displayed.
- NTLDR uses a file called NTDETECT.COM to detect and configure access to the various hardware components of your machine. Without NTDETECT.COM, NTLDR cannot access your hard drives and load Windows. NTDETECT.COM must be present in the root of the active partition on disk 0, together with BOOT.INI, or else Windows XP will fail to load.
- A file called BOOT.INI stores information regarding the physical location(s) of your various Windows NT-based installations. NTLDR accesses this file to get a list of the installed operating systems and display them in the on-screen boot menu for the end user to pick and OS to load into.
Can you detect the problem in this design?
Hint: what happens if you try to add a second Windows XP entry to the mix? Keep in mind that there’s only one active partition on disk 0, and that one and only one boot.ini may exist at a time. NTLDR can’t get its list of operating systems from anything other than the boot.ini on the active partition on disk 0, so if you add another operating system to the mix, you end up with something like this:
Basically, you have to go through a two-level boot menu, and you cannot – however hard you try – add both Windows XP entries to the main bootmgr boot menu. In order to load either of the two XP entries, you’ll need to select the NTLDR entry (called “Legacy Entries” by default) from the bootmgr/bcd boot menu, and then select the copy of Windows XP you wish to boot into from the second menu presented by NTLDR.
EasyBCD and EasyLDR
Annoying, right? With EasyBCD 2.0 though, there is a solution. We’ve developed our own version of NTLDR, and bootmgr will load a separate copy of EasyLDR for each Windows XP entry in the menu. Each copy of EasyLDR is configured to boot into one and only one copy of Windows XP, so your complicated two-level boot menu in the previous picture boils down to a much simpler and prettier result:
Keep in mind that since there’s only one entry in each EasyLDR instance, no second menu will ever appear. Selecting the first Windows XP entry in the top-level BCD menu will directly load the first copy of Windows XP and selecting the second Windows XP entry in the top-level BCD menu will take you directly to the second copy of Windows XP, with no additional menu or action in between. EasyLDR sits quietly and invisibly in the middle, making sure everything works as expected.
The Mechanics of NTLDR and EasyLDR
As mentioned before, NTLDR and EasyLDR need several other files to do their job correctly. While NTLDR/EasyLDR can be located anywhere, they will only look for their helper files and read their configuration from the root of the active partition on disk 0.
As a result, the disk that EasyBCD shows is the location of NTLDR/EasyLDR and not the disk that Windows XP is located on.
EasyBCD supports the creation of both standard (NTLDR) entries and its own custom EasyLDR ones. The type of entry created depends on whether or not the “autoconfiguration checkbox” is selected when adding a new Windows XP entry in EasyBCD 2.0 and above (see the next section for more info).
When a new NTLDR-based entry is created, EasyBCD creates the following files:
In this case, boot.ini will contain one or more entries in the standard boot.ini format. In case the boot partition (the active partition on disk 0) is not assigned a drive letter, the NST folder and its contents will be created on the system disk, while NTDETECT.COM and BOOT.INI will still be placed on the unmounted boot partition.
When a new EasyLDR-based entry is created, EasyBCD creates the following files:
Each ebcd.00x file in the diagram above is a boot configuration file that tells EasyLDR from which partition to load Windows XP. To keep things simple, ebcd.00x files are in the same exact format as BOOT.INI, but only contain the information for a single Windows XP entry.
In case the boot partition is not assigned a drive letter, the NST folder and its contents will be created on the system disk, while NTDETECT.COM and the ebcd.00x files will still be placed on the unmounted boot partition. Each easyldrX file in the NST folder corresponds to a single ebcd.00X file in the root of the boot drive (the opposite also holds true). And each ebcd.00X file corresponds to one and only one Windows NT/XP install.
Adding a Windows XP entry with EasyBCD
Creating a new Windows XP entry with EasyBCD is very easy. By default, EasyBCD will create a Windows XP entry via the NTLDR method described above in order to minimize confusion and because most users will not have multiple legacy entries alongside their Vista/7 installs. However, creating a EasyLDR-based entry is also simple, and only a checkbox away.
NTLDR-based entries require you to only point and click. Just enter a name for the new entry that will appear in the boot menu, and click “Add Entry” and EasyBCD will automatically create the needed boot files. NTLDR will be placed in the NST subfolder as shown above, and NTDETECT will be placed in the root of the boot partition. EasyBCD’s “BootGrabber.exe” helper module will scan all mounted partitions for legacy NT-based installs (Windows NT through 2003), and automatically generate a boot.ini that contains all detected legacy installations:
EasyLDR-based entries aren’t that much more difficult to create. All you need to do is uncheck the checkbox labeled “automatically detect the correct drive.” Subsequently, a drop-down box containing a list of all mounted partitions will appear, and you can choose the Windows XP installation you wish to boot into. Clicking “Add Entry” will cause EasyBCD to automatically create the easyldr#, ntdetect.com, and ebcd.00x files needed to boot into the selected partition. You can then repeat these steps for as many separate legacy NT installs as you have available:
When viewing entry details/settings, EasyBCD will show the drive letter that the NST folder is on for Windows XP entries. This is the drive that the BCD menu should load either NTLDR or EasyLDR from, and not the drive that Windows XP is installed on. Do not change this path, it won’t do any good and will stop BOOTMGR from correctly loading NTLDR/EasyLDR, preventing Windows XP from loading!
This section provides links to external (non-NST) guides regarding dual-booting Windows Vista/7/8 & Windows XP with EasyBCD.
- APC Magazine’s Vista & XP Dual Boot Guides - An excellent step-by-step guide with lots of pictures.
- The Starman’s Boot.ini Guide - The reference for boot.ini-related problems, though a little hard on the eyes.
- Victor Laurie’s Guide to Boot.ini - A quick and easy reference for the correct configuration of boot.ini.
In actuality, bootmgr does not load Windows Vista+ itself, rather it loads winload.exe which in turn loads the kernel. ↩