HalpMcaReportError
NTSTATUS __fastcall HalpMcaReportError(_WHEA_ERROR_PACKET_V2 *ErrPkt, INT64 a2, ULONG_PTR BugCheckParameter1){
INT64 v6;
UINT64 v7;
_WHEAP_ERROR_SOURCE *ErrorSource;
__int64 v9;
CHAR CpuInfo;
char v12[16];
INT64 BugCheckParameter2[32];
v12[0] = 0;
memset(BugCheckParameter2, 0i64, sizeof(BugCheckParameter2));
if( !ErrPkt )
{
if( a2 )
{
HalpTranslateToLegacyMcaException(a2, (INT64)BugCheckParameter2);
KeBugCheckEx(
0x9Cu,
(PVOID)LOBYTE(BugCheckParameter2[3]),
BugCheckParameter2,
(PVOID)HIDWORD(BugCheckParameter2[4]),
(PVOID)LODWORD(BugCheckParameter2[4]));
}
LODWORD(BugCheckParameter2[0]) = 1;
BugCheckParameter2[1] = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
LODWORD(BugCheckParameter2[2]) = BugCheckParameter1;
if( BugCheckParameter1 > 0x80000000 )
KeBugCheckEx(0x9Cu, (PVOID)BugCheckParameter1, BugCheckParameter2, 0i64, 0i64);
KeBugCheckEx(0x9Cu, 0i64, BugCheckParameter2, 0i64, 0i64);
}
ErrorSource = WheapGetErrorSource((_WHEAP_ERROR_SOURCE_TABLE *)&WheapErrorSourceTable, ErrPkt->ErrorSourceId, v6, v7);
v9 = (unsigned __int64)&ErrorSource->Descriptor & -(__int64)(ErrorSource != 0i64);
CpuInfo = HalpGetCpuInfo(0i64, 0i64, 0i64, (UINT8 *)v12);
if( (v12[0] & (unsigned __int8)-(CpuInfo != 0)) == 1 && HalpMcaScalableRasSupported )
ErrPkt->Flags._bf_0 |= 0x40u;
if( v9 )
PshedRetrieveErrorInfo(ErrPkt, v9);
return WheaReportHwError(ErrPkt);
}Referenced by:
HalpCmcPollProcessor
HalpMceHandlerWithRendezvous