Error Records
The Windows Hardware Error Architecture (WHEA) uses a standard error record format to represent all platform hardware errors. As a result, the system firmware, the Windows operating system, and user-mode applications can design hardware error reporting and recovery mechanisms that are all based on the same error record format.
The format of the error records that are used by WHEA are based on the Common Platform Error Record (CPER) as described in Appendix N of version 2.2 of the Unified Extensible Firmware Interface (UEFI) Specification.
The following diagram shows the general format of an error record.
An error record consists of an error record header followed by one or more fixed-length error record section descriptors. For each error record section descriptor, there's an associated variable-length error record section that contains either error data or informational data. An error record must contain at least one error record section.
An error record can include extra buffer space for the dynamic addition of error record sections and section descriptors. The extra buffer space can also be used to dynamically increase the size of existing error record sections.
An error record is described by a WHEA_ERROR_RECORD structure, the error record header is described by a WHEA_ERROR_RECORD_HEADER structure, and the error record section descriptors are each described by a WHEA_ERROR_RECORD_SECTION_DESCRIPTOR structure.
Each error record section can be one of the following section types:
Hardware Error Packet
This error record section contains the hardware error packet that was passed to the operating system by the low-level hardware error handler (LLHEH) that reported the error. The data that is contained in this section is described by the WHEA_ERROR_PACKET structure.
Generic Processor Error
This error record section contains processor error data that isn't specific to a particular processor architecture. The data that is contained in this section is described by the WHEA_PROCESSOR_GENERIC_ERROR_SECTION structure.
x86/x64 Processor Error
This error record section contains processor error data that is specific to the x86 or x64 processor architecture. The data that is contained in this section is described by the WHEA_XPF_PROCESSOR_ERROR_SECTION structure. The following diagram shows how the data structures that contain the processor error data are stored in the VariableInfo member.
Itanium Processor Error
This error record section contains processor error data that is specific to the Itanium processor architecture. For more information about the format of the error data that is contained in this error record section, see the Intel Itanium Processor Family System Abstraction Layer Specification.
Itanium Processor Firmware Error Record Reference
This error record section contains a reference to a firmware error record that is specific to the Itanium processor architecture. This error record section is described by a WHEA_FIRMWARE_ERROR_RECORD_REFERENCE structure.
Platform Memory Error
This error record section contains platform memory error data. The data that is contained in this section is described by the WHEA_MEMORY_ERROR_SECTION structure.
Nonmaskable Interrupt
This error record section contains nonmaskable interrupt (NMI) data. The data that is contained in this section is described by the WHEA_NMI_ERROR_SECTION structure.
PCI Express Error
This error record section contains PCI Express error data. The data that is contained in this section is described by the WHEA_PCIEXPRESS_ERROR_SECTION structure.
PCI/PCI-X Bus Error
This error record section contains PCI/PCI-X bus error data. The data that is contained in this section is described by the WHEA_PCIXBUS_ERROR_SECTION structure.
PCI/PCI-X Device Error
This error record section contains PCI/PCI-X device error data. The data that is contained in this section is described by the WHEA_PCIXDEVICE_ERROR_SECTION structure.
For additional hardware error data that doesn't fit into one of the section types in the previous list, a platform-specific error record section can be defined to contain the data. For each type of platform-specific error record section that is defined, a corresponding GUID that identifies the type of the error record section must be defined. This GUID is specified in the SectionType member of any WHEA_ERROR_RECORD_SECTION_DESCRIPTOR structure that describes that type of error record section.
If there's additional hardware error data that doesn't fit into one of the section types in the previous list or into a defined platform-specific error record section, a generic error record section is used to contain the data.