Windows 8.1 Blue Screen on VMWare ESX 4.X

Attempts to build Windows 8.1 Update 1 on a VMWare ESX host produces the error “Your PC ran into a problem that it couldn’t handle, and now it needs to restart.” HAL INITIALIZATION FAILED.

The Hardware Abstraction Layer is an extremely low level in the Windows boot process and points out that the problem is most likely in the BIOS itself.  As Windows 8.1 has slightly different BIOS requirements to Windows 8 and earlier Windows machines it’s not a complete surprise that this error is happening with such an old version of VMWare ESX. 

A search of the internet produces dozens of pages that that provide links to a new “440” BIOS rom that can be downloaded to supposedly fix this error but with Windows 8.1 doesn’t work.

Windows 8.1 Compatible BIOS

The process for fixing this error by specifying a new bios rom is right but the ROM files floating around on the internet were extracted from VMWare installations when Windows 8.0 was released.  Windows 8.1 support wasn’t included with VMWare products until October 2013 and it’s extremely hard to tell the different ROM files apart without opening them with the Phoenix BIOS editor.

The good news is that ESX 4.X can still be used to run Windows 8.1 Update 1 workstations but you will need to extract your own updated ROM instead of trusting one of the many copies floating around on the net.  The details of how to extract the VMWare Rom was documented by Pete Akeo in 2011.  Essentially it involves opening an updated VMWare VMX file from a recent VMWare product such as VMWare Player or VMWare Workstation with 7Zip.  The Binary resource will be seen under the resource fork “\.rsrc\BINRES\” with the identification 6006.

When the 6006 file is extracted from the executable the date / time stamp will show 18/10/2013 if it will support Windows 8.1

The existing & well published solutions for forcing a VMWare machine instance to use the updated BIOS can be followed.  This involves opening the .vmx file for the virtual machine with a text editor and inserting the following lines:

bios440.filename = "extracted 6006 rom file name

mce.enable = TRUE

cpuid.hypervisor.v0 = FALSE

vmGenCounter.enable = FALSE

 

… of course changing the rom filename to whatever you have called the extracted file.  The ROM file should be copied into the same directory as the virtual machine.