HalpMceHandler
CHAR __fastcall HalpMceHandler(INT64 a1, CHAR a2){
CHAR v2;
unsigned __int64 v5;
unsigned int v6;
__int64 v7;
CHAR v8;
INT64 v10;
INT64 v11;
HIDWORD(v10) = 0;
v2 = 0;
if( !HalpHvWheaEnlightenedCpuManager || HalpMceBroadcast )
{
v7 = *((_QWORD *)KeGetPcr() + 27);
while( v7 )
{
v8 = HalpMceHandlerCore(a1, a2, *(_QWORD *)(v7 + 164));
v7 = *(_QWORD *)(v7 + 176);
if( v8 )
v2 = 1;
}
}
else
{
while( 1 )
{
v5 = __readmsr(0x40000030u);
v6 = v5;
LODWORD(v10) = v5;
if( (_DWORD)v5 == -1 )
break;
if( HalpMceHandlerCore(a1, a2, v10) )
v2 = 1;
__writemsr(0x40000031u, v6);
}
HIDWORD(v11) = 1;
LODWORD(v11) = *((_DWORD *)KeGetPcr() + 105) & 0x7FFFFFFF;
if( HalpMceHandlerCore(a1, a2, v11) )
return 1;
}
return v2;
}Referenced by:
HalpHandleMachineCheck
HalpMceHandlerWithRendezvous