HalpMcaPopulateErrorData

VOID __stdcall HalpMcaPopulateErrorData(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
  unsigned int v5; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  _WHEA_ERROR_SOURCE_DESCRIPTOR *v13; 
  _WHEA_ERROR_PACKET_V2 *v14; 
  int v15; 
  char v16; 
  bool v17; 
  _OWORD v18[3]; 

  v5 = a2;
  HalpMcaInitializeErrorSection(a5, a1);
  v9 = ((__int64(__fastcall *)(INT64, __int64, _QWORD))qword_140C49C20)(a1, 378i64, 0i64);
  *(_DWORD *)(a5 + 36) = v5;
  *(_QWORD *)(a5 + 40) = a3;
  if( (a3 & 0x400000000000000i64) != 0 )
  {
    LODWORD(v10) = HalpWheaReadMsrAddress(a1, v5);
    *(_QWORD *)(a5 + 48) = v10;
  }
  v11 = 0i64;
  if( (a3 & 0x800000000000000i64) != 0 && byte_140C50522 )
  {
    LODWORD(v12) = HalpWheaReadMsrMisc(a1, v5);
    *(_QWORD *)(a5 + 56) = v12;
  }
  v13 = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((__int64(__fastcall *)(INT64, __int64, _QWORD))qword_140C49C20)(
                                           a1,
                                           377i64,
                                           0i64);
  v15 = *(_DWORD *)(a5 + 4);
  if( v15 == 1 )
  {
    HalpReadExtendedMcaRegistersIntel(v13, v14, (_WHEA_ERROR_RECORD *)a1, (PVOID)a5);
  }
  else if( v15 == 2 )
  {
    HalpReadExtendedMcaRegistersAMD();
  }
  v16 = v9;
  if( (v9 & 4) != 0 )
  {
    v17 = byte_140C4A110 == 0;
    *(_QWORD *)(a5 + 20) = v9;
    if( !v17 )
    {
      v18[0] = 0i64;
      if( HalpHvGetMachineCheckContext((unsigned int)a1, (INT64)v18) >= 0 && LODWORD(v18[0]) != 2 )
        v16 = v9 & 0xFD;
    }
    if( a4 && (v16 & 2) != 0 )
      *(_QWORD *)(a5 + 28) = *(_QWORD *)(a4 + 360);
    if( HalpGetCpuVendor() == 2 )
      v11 = ((__int64(__fastcall *)(INT64, __int64, _QWORD))qword_140C49C20)(a1, 377i64, 0i64);
    *(_QWORD *)(a5 + 264) = v11;
  }
}

Referenced by:

HalpMcaReadError