HalpHandleMachineCheck

CHAR __fastcall HalpHandleMachineCheck(INT64 a1){
  __int64 i; 
  UINT64 v3; 
  CHAR result; 
  unsigned __int8 v5; 
  unsigned __int64 v6; 
  if( !HalpMceBroadcast )
    return HalpMceHandler(a1, 0);
  for( i = *((_QWORD *)KeGetPcr() + 27); ; i = *(_QWORD *)(i + 176) )
  {
    if( !i )
      return HalpMceHandlerWithRendezvous(a1);
    if( (((__int64(__fastcall *)(_QWORD, __int64, _QWORD))HalpWheaReadMsr)(*(_QWORD *)(i + 164), 378i64, 0i64) & 8) != 0 )
      break;
  }
  KeAcquireSpinLockRaiseToDpc(&HalpMceLocalHandlingLock, v3);
  v6 = v5;
  HalpMceHandler(a1, 1);
  KxReleaseSpinLock(&HalpMceLocalHandlingLock);
  result = KiIrqlFlags;
  __writecr8(v6);
  return result;
}

Referenced by:

HalHandleMcheck