Error 0x0000007B during native boot

Windows 7 Ultimate introduced interesting feature – native boot to system installed in Virtual Hard Disk (VHD). It works like this: we create virtual drive, install operating system in it (by using ordinary installer or by applying image), configure boot manager and add entry for newly created operating system, and finally we run this system directly from VHD. It is very convenient – we don’t need to create partitions to test new operating system, we are also able to move the file easily between machines and have our system always with us. However, sometimes we might receive strange error when booting system in new environment.

0x0000007B – error during boot

We might receive this error while running the system on different machine or when running it using different virtual hypervisor. If we try too google this error, most likely we will find information that we created dynamic disc and this causes errors. However, changing VHD type or event expanding it by hand (by copying some files) doesn’t help. Also Windows’ automatic repair doesn’t help.

Reason- drivers

During boot Windows reads registry to find drivers required to successfully run operating system. These drivers are set to 0 – SERVICE_BOOT_START. However, most of the drivers are not required in such an early startup phase, so they have this option set to 3 – SERVICE_DEMAND_START. The problem arises when the driver is essential during boot but is not configured to be loaded as soon as possible.

This problem might occur when we change our hardware configuration. The original machine (the one which we used to install OS) was equipped with different hard drive controller then our current computer. Also hypervisor might virtualize hard drive using different architecture than our OS is expecting.

Solution – reconfigure drivers

Solution is simple – we need to find required driver and configure it to be loaded as soon as possible. To do that:

  • Start regedit.exe as an administrator
  • Go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
  • Set Start to 0 for the driver

However, there is a question – which driver is the one we are looking for? The easiest way to find out is to start natively installed Windows on the target machine and check which drivers have Start set to 0. If it is not possible, we might try to reconfigure all drivers with names ending with ide (like intelide, viaide, etc.) or drivers with Group set to SCSI Miniport.