Why Windows 10 Boot Manager can't load Windows Vista?

0

I had a Windows Vista/7 dual boot set up in UEFI, GPT mode (i.e using the EFI system partition to boot). The Windows Boot Manager would let me select between 7 and Vista, and both OS's worked fine. Then I installed Windows 10 in another partition and that's when the problem started. Windows 10 replaced the old Windows 7 Boot Manager in the ESP with his own, and altough Windows Vista still appears in the list of OS's, when booting into it, it crashes with STOP 0x0000001e. (I'm still able to boot into Windows 7, though).

Searching around I found this person who encountered the same problem. He was able to determine that Windows 8 also causes this problem, but in the end I think he gave up (said it was "drivers not supported by Vista" but I think that's not my case, since I had Vista working before with all drivers).

So, why Windows 10 (and 8) Boot Manager can't load Windows Vista?. I thought that the only thing the Boot Manager did was loading and transferring control to specific OS loaders, but it looks like it does more things, one of which now is preventing Vista to load. Using bcdedit /enum all /v in Windows 10 I found some "hidden" variables under the Vista bootloader:

custom:42000002     \system32\winload.efi
custom:45000001     2
custom:47000005     301989892
                    2

Here (in the Template Elements subtitle) it says that this elements are from the BCDSRV.DLL file, and, most importantly:

Not until the type library in BCDSRV.DLL from Windows 7 does BcdSetupInteger_DeviceType actually evaluate to a datatype for an integer. All builds for Windows Vista have it as 0x41000001.

The value for Windows 7+, as shown in the table in that page, is 0x45000001, which is the same that appears in my bcdedit output. Could this be the cause of the problem? Vista is expecting a 0x41000001 element, but Windows 10 replaced it and now it's passing 0x45000001, which Vista doesn't recognize. But then why Windows 7 itself didn't replaced it before?. Also, I wasn't able to found info about the 0x47000005 element. I tried the following:

  • Deleting all three entries using bcdedit /deletevalue, but it didn't work (same BSOD).
  • Tried to set the "correct" element 0x41000001, using bcdedit /set, but it complains that the device is not valid as it was specified, and that the parameter is incorrect (which makes sense since this element doesn't exist anymore in BCDSRV.DLL on Windows 7 and 10).
  • bcdboot D:\Windows, which according to this would copy the boot files from the selected installation to the ESP (Vista installation is on drive D), but it didn't work either (also it didn't seem to copy any file, as all the files in the \EFI\Microsoft\Boot folder still had the date and size of the Windows 10 files).

The more it seems to me that there is some structural limitation that prevents the Windows 10 Boot Manager to load correctly the Windows Vista loader, but I have no idea of what is it and if it's possible to "fix".

In the case that it's not possible, I've thought of a workaround. Since the Windows 7 Boot Manager was able to correctly boot Vista, then I could install it in the ESP, alongside the Windows 10 Boot Manager. Then, using the UEFI boot menu, I could select which boot manager to load: the Windows 7 one or the Windows 10 one. The Windows 7 one should be able to boot Windows Vista (but not Windows 10, for which i'd had to select the Windows 10 one). But I don't know how to do so. I think it's not enough to copy the Windows 7 Boot Manager files from the Windows 7 installation to the ESP (in another folder, to say, \EFI\Win7mgr\Boot); to the UEFI to recognize them, some values (probably the path to the boot manager) must be set in the NVRAM, which I don't know how to do.

(Please let me know if this last part should be in another question, as I am new to the site)

Additional details:

  • Secure boot: Not present in the motherboard (ASUS P8H61-M LX, from around 2011)
  • UEFI OS: In the UEFI boot menu (access pressing Del on startup), it shows these devices:
UEFI: Windows Boot Manager (Hard disk id)
DVD drive id
Hard disk id (BIOS mode, I assume)
UEFI: UEFI OS (Hard disk id)

I found out that the UEFI OS one is the bootloader located at \EFI\Boot\bootx64.efi, used as a fallback if the UEFI can't find another entry set up in the NVRAM (I think), and that, after installing Windows, it's actually a copy of EFI\Microsoft\Boot\bootmgfw.efi (the Windows 10 boot manager, I tested it myself). If I am unable to set up the NVRAM in my purposed workaround, could I copy the Windows 7 Boot manager files to that directory (\EFI\Boot) and rename the Windows 7 bootmgfw.efi to bootx64.efi so that I could load it by selecting UEFI OS in the UEFI boot menu, without needing to create or update NVRAM entries, since there should be already there for that option?

windows-10
windows-vista
multi-boot
uefi
bootloader
asked on Super User May 29, 2020 by alexixo • edited May 30, 2020 by alexixo

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0