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