HalpMceRecoveryMemoryErrorIntel
INT64 __fastcall HalpMceRecoveryMemoryErrorIntel(INT64 a1){
__int64 v1;
__int64 v2;
bool v3;
unsigned int v5;
__int64 v6;
char v7;
__int64 v8;
v1 = *(_QWORD *)(a1 + 20);
v2 = *(_QWORD *)(a1 + 40);
v3 = 0;
v5 = -1073741637;
if( (v1 & 3) == 1 )
return v5;
if( (unsigned __int8)v2 >> 4 != 3 )
{
if( (unsigned __int8)v2 >> 4 == 5 && (((unsigned __int8)v2 >> 2) & 3) == 0 )
v3 = (v2 & 3) == 0;
LABEL_9:
if( !v3 )
return v5;
goto LABEL_10;
}
if( (((unsigned __int8)v2 >> 2) & 3) != 1 || (v2 & 3) != 0 )
goto LABEL_9;
v3 = 1;
LABEL_10:
if( (v2 & 0x800000000000000i64) != 0 && (v2 & 0x400000000000000i64) != 0 )
{
v6 = *(_QWORD *)(a1 + 56);
if( (*(_QWORD *)(a1 + 56) & 0x1C0i64) == 128 )
{
v7 = v6 & 0x3F;
v8 = HalpMcaPhysicalAddressMask & *(_QWORD *)(a1 + 48) & ~((1i64 << v7) - 1);
if( !HalpHvWheaEnlightenedCpuManager )
return(unsigned int)HalpMceMemoryErrorRecovery(v3, 1, v8);
v5 = HalpHvMceConsumedMemoryErrorRecovery(
*(unsigned int *)(a1 + 16),
HalpMcaPhysicalAddressMask & *(_QWORD *)(a1 + 48) & ~((1i64 << v7) - 1),
v2,
(v1 & 2) != 0,
v1 & 1);
if( (v5 & 0x80000000) != 0 )
return(unsigned int)HalpMceMemoryErrorRecovery(v3, 1, v8);
}
}
return v5;
}Referenced by:
HalpMceRecoveryRequired