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