Bug Check 0x0124

The WHEA_UNRECOVERABLE_ERROR bug check reports that the Windows Hardware Error Architecture (WHEA) received an error that it has been unable to correct or which is anyway fatal.

Bug Check Code: WHEA_UNRECOVERABLE_ERROR
1st Argument: type of error source (from the WHEA_ERROR_SOURCE_TYPE enumeration)
2nd Argument: address of WHEA_ERROR_RECORD structure
3rd Argument: high dword of status, if error source is Machine Check Exception or Corrected Machine Check;
0, otherwise
4th Argument: low dword of status, if error source is Machine Check Exception or Corrected Machine Check;
0, otherwise

The only known cause of the WHEA_UNRECOVERABLE_ERROR bug check is that some kernel-mode module, presumably what the WHEA documentation refers to as a Low-Level Hardware Error Handler (LLHEH), calls the kernel function WheaReportHwError for an error whose severity is said to be either

With the system looking like it must be halted, the kernel calls the PSHED function PshedBugCheckSystem. If this, in its turn, calls the HAL function HalBugCheckSystem and the type of error source is any of the following:

then the HAL halts the system by raising the WHEA_UNRECOVERABLE_ERROR bug check.

For the MCE and CMC sources, the HAL is itself the LLHEH getting back its own hardware-specific description of the error. It extracts from this a 64-bit status to add to the bug check as the third and fourth arguments. The status depends on the MCA bit (0x4000) in the CPUID feature flags, as determined during the HAL’s initialisation. Without this Machine Check Architecture (MCA) feature, the status is simply the value of the machine-specific register IA32_P5_MC_TYPE at the time of the exception. In new processors, the status is the value of the IA32_MCi_STATUS register for the MCA bank that had the error.

Availability

The WHEA_UNRECOVERABLE_ERROR bug check is new for Windows Vista.

Documentation Status

Though this bug check is defined symbolically in BUGCODES.H from the Windows Driver Kit (WDK) for Windows Vista, it somehow manages to escape being listed either in the WDK documentation or in contemporaneous “Debugging Tools for Windows” package.