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