HalpMcaReportError
NTSTATUS __fastcall HalpMcaReportError(_WHEA_ERROR_PACKET_V2 *ErrPkt, INT64 a2, ULONG_PTR BugCheckParameter1){
unsigned int v3;
INT64 *ErrorSource;
__int64 v7;
CHAR CpuInfo;
char v10[16];
ULONG_PTR BugCheckParameter2[2];
unsigned int v12;
unsigned __int8 v13;
ULONG_PTR v14;
v3 = BugCheckParameter1;
v10[0] = 0;
memset((INT64)BugCheckParameter2, 0i64);
if( !ErrPkt )
{
if( a2 )
{
HalpTranslateToLegacyMcaException(a2, (INT64)BugCheckParameter2);
KeBugCheckEx(0x9Cu, v13, (ULONG_PTR)BugCheckParameter2, HIDWORD(v14), (unsigned int)v14);
}
LODWORD(BugCheckParameter2[0]) = 1;
BugCheckParameter2[1] = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
v12 = v3;
if( v3 > 0x80000000 )
KeBugCheckEx(0x9Cu, v3, (ULONG_PTR)BugCheckParameter2, 0i64, 0i64);
KeBugCheckEx(0x9Cu, 0i64, (ULONG_PTR)BugCheckParameter2, 0i64, 0i64);
}
ErrorSource = WheapGetErrorSource((INT64)&WheapErrorSourceTable, ErrPkt->ErrorSourceId);
v7 = (unsigned __int64)(ErrorSource + 12) & -(__int64)(ErrorSource != 0i64);
CpuInfo = HalpGetCpuInfo(0i64, 0i64, 0i64, (UINT8 *)v10);
if( (v10[0] & (unsigned __int8)-(CpuInfo != 0)) == 1 && HalpMcaScalableRasSupported )
ErrPkt->Flags.AsULONG |= 0x40u;
if( v7 )
PshedRetrieveErrorInfo(ErrPkt, v7);
return WheaReportHwError(ErrPkt);
}Referenced by:
HalpCmcPollProcessor
HalpHandlePreviousMcaErrorsOnProcessor
HalpMceHandlerCore
HalpMceHandlerWithRendezvous