HalpMcaPopulateErrorData

VOID __fastcall HalpMcaPopulateErrorData(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  unsigned int v5; 
  __int64 v9; 
  __int64 v10; 
  WHEA_ERROR_SOURCE_DESCRIPTOR *v11; 
  _WHEA_ERROR_PACKET_V2 *v12; 
  INT64 v13; 
  char v14; 
  bool v15; 
  _OWORD v16[3]; 
  v5 = a2;
  HalpMcaInitializeErrorSection(a5, a1);
  v9 = ((__int64(__fastcall *)(INT64, __int64, _QWORD))HalpWheaReadMsr)(a1, 378i64, 0i64);
  *(_DWORD *)(a5 + 36) = v5;
  *(_QWORD *)(a5 + 40) = a3;
  if( (a3 & 0x400000000000000i64) != 0 )
    *(_QWORD *)(a5 + 48) = HalpWheaReadMsrAddress(a1, v5);
  v10 = 0i64;
  if( (a3 & 0x800000000000000i64) != 0 && HalpMcaMiscImplemented )
    *(_QWORD *)(a5 + 56) = HalpWheaReadMsrMisc(a1, v5);
  v11 = (WHEA_ERROR_SOURCE_DESCRIPTOR *)((__int64(__fastcall *)(INT64, __int64, _QWORD))HalpWheaReadMsr)(
                                          a1,
                                          377i64,
                                          0i64);
  v13 = *(unsigned int *)(a5 + 4);
  if( (_DWORD)v13 == 1 )
  {
    HalpReadExtendedMcaRegistersIntel(v11, v12, (WHEA_ERROR_RECORD *)a1, (PVOID)a5);
  }
  else if( (_DWORD)v13 == 2 )
  {
    HalpReadExtendedMcaRegistersAMD(v13, v5, a1, (_QWORD *)a5);
  }
  v14 = v9;
  if( (v9 & 4) != 0 )
  {
    v15 = HalpHvWheaEnlightenedCpuManager == 0;
    *(_QWORD *)(a5 + 20) = v9;
    if( !v15 )
    {
      v16[0] = 0i64;
      if( (int)HalpHvGetMachineCheckContext((unsigned int)a1, (INT64)v16) >= 0 && LODWORD(v16[0]) != 2 )
        v14 = v9 & 0xFD;
    }
    if( a4 && (v14 & 2) != 0 )
      *(_QWORD *)(a5 + 28) = *(_QWORD *)(a4 + 360);
    if( HalpGetCpuVendor() == 2 )
      v10 = ((__int64(__fastcall *)(INT64, __int64, _QWORD))HalpWheaReadMsr)(a1, 377i64, 0i64);
    *(_QWORD *)(a5 + 264) = v10;
  }
}

Referenced by:

HalpMcaReadError