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