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

64-bitbootloadermulti-bootuefiwindows 8.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.

Best Answer

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.