Windows 8.1 UEFI x64 is not able to boot-up UEFI Images

1

The question appeared after asking this one. It seems that the Win8.1 UEFI x64 Boot Manager is unable to boot anything other than the windows itself (winload.efi). Trying to launch any other UEFI image (.efi) from it gives the error code 0xC000007B and I'm pretty sure that this isn't because of a missing file but instead because the file is 'invalid' as when I rename that file the error changes to 0xC000000F. I have disabled the secure boot but without any luck.

At the moment I'm trying to integrate the rEFInd bootloader. I can say that it's UEFI image is working as it is able to boot from a USB flash drive using the firmware. Using the Windows Boot Manager however give the same results explained above (error code 0xC000007B). At the moment my BCD configuration is (picture):

Command line screenshot http://imageshack.com/a/img811/7857/kbth.png

As F:\rEfit\refind is the directory where refind is stored and "refind_x64.efi" is the program image.

NOTE: I'm also wondering are only UEFI images (.efi files) allowed to boot in an UEFI Windows and also what is the format of the non-UEFI one's (like ntldr, bootmgr)?

EDIT: Moving rEFInd to a standard directory ("EFI") didn't solved the problem.

64-bit
multi-boot
windows-8.1
bootloader
uefi
asked on Super User Dec 21, 2013 by Nemo759 • edited Mar 20, 2017 by Community

3 Answers

3

After 1 year I came across the same problem again. Luckily this time I found a solution. In order to add an OsLoader in windows Boot-Manager which loads non-Windows UEFI images you need to manually edit BCD registry. In RegEdit there is a key named "HKEY_LOCAL_MACHINE\BCD00000000" - which is loaded from Windows EFI System-Partition and editing it's subkeys directly edit the BSD file. There is a key named "Description" under it but we'll focus on the other one named "Objects". Under it you need to a new object (or modify existing). Then under the target-object-GUID-name you need to edit the "Description" Type value to "0x10100003" (which means firmware application osloader - credits for this find go to this page). That's it - then the 'path' and 'device' elements of this object specify an UEFI file which will be loaded when the OS-Loader is selected.

BIG WARNING:

Don't do the above just to test it - loading an Uefi this way burns it down into the Uefi Boot configuration and after loading - you may wouldn't be able booting to Windows again (unless the app you loaded doesn't reset the Uefi Boot Cfg) - so use this only if you're sure about it.

I did so and then I should manually fix my Windows boot-up using Uefi Boot Cfg. Which is prefered to use.

EDIT: I forgot to add that you first need to own permission for editing "HKEY_LOCAL_MACHINE\BCD00000000", which is easy - just click Properties on it and change permissions ;).

EDIT: This discovery shows that the most powerful (and easy - at least for me) way of editing Windows BSD is using the registry. The behavior I accomplished by doing so - isn't possible to be done using BCDedit, neither the BCD WMI.

answered on Super User Jan 2, 2015 by Nemo759 • edited Jan 2, 2015 by Nemo759
1

EFI is a pre-boot environment. As such, EFI itself is not a Windows tool, a Linux tool, or any other OS-level tool. I want to make this clear because some of your phrases make it sound as if you think EFI is a part of Windows. It isn't.

The path rEfit\refind is an unusual one for an EFI boot program. Such programs normally reside in subdirectories of the EFI directory on the ESP, as in EFI\refind or EFI\Microsoft. Although such a non-standard location is unlikely to be the source of your problem, I can't rule out that possibility. Thus, using a more normal location is my first suggestion.

I'm not very familiar with the output of the Windows bcdedit command that you've shown, so I can't comment on it; however, I can suggest that you review the rEFInd installation instructions for installing from Windows. It's entirely possible that you erred in typing in one of the commands.

If that doesn't help, then try installing rEFInd from another OS. Presumably you've installed rEFInd to boot something else along with Windows. For most people that's Linux, and if the Windows tools aren't working, you should be able to install rEFInd from Linux.

answered on Super User Dec 21, 2013 by Rod Smith
0

All the efi boot managers/loaders need to be on the ESP partition; you cannot have refind on your F: drive, which is probably formatted as an NTFS drive. EFI systems look in a specific partition partition which is labelled as the "ESP" and formatted as fat32. EFI systems do not have drivers for other filesystems.

refind includes drivers for ext2/4 reiserfs btrfs and iso9660, but as you see your windows EFI loader is located at \EFI\Microsoft\Boot\bootmgfw.efi. This partition is not viewable from windows as it is hidden, but if you boot with a linux live (with gparted for instance), then you will be able to see it. Then you need to put refind in \EFI\refind so the rEFInd loader is at \EFI\refind\bootx64.efi

Then you can attempt getting it to chainload from the windows loader but it would be far better to point your system at refind's .efi file as the default loader as this will scan your system and give you icons representing the efi/legacy boot options available to you. I use refind and when i switch on my laptop i have a windows 7 icon, a windows 8 icon, an ubuntu icon, a fedora icon and an ubuntustudio icon to choose from. If I have bootable usbs or dvds inserted an icon will also appear for them.

It works great with the default settings but is also easily customizable. You won't be able to load an efi bootloader from any partition other than the fat32 ESP partition, although once refind has been loaded from the ESP partition it can access loaders efi and legacy loaders on other partitions.

answered on Super User Dec 25, 2013 by b907 • edited Jan 28, 2014 by Community

User contributions licensed under CC BY-SA 3.0