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