HalpCmciHandler

CHAR __stdcall HalpCmciHandler(){
  KPCR *Pcr; 
  __int64 v1; 
  INT64 v2; 
  LARGE_INTEGER PerformanceCounter; 
  unsigned int v4; 
  unsigned __int8 CurrentIrql; 
  __int128 Src; 
  __int128 v8; 
  LOBYTE(Pcr) = HalpMcaWheaReady;
  Src = 0i64;
  v8 = 0i64;
  if( !HalpMcaWheaReady )
    return(char)Pcr;
  Pcr = KeGetPcr();
  v1 = *((_QWORD *)Pcr + 27);
  if( !v1 )
    return(char)Pcr;
  while( 1 )
  {
    v2 = *(_QWORD *)(v1 + 164);
    if( *(_QWORD *)(v1 + 16) )
    {
      if( *(_QWORD *)(v1 + 24) )
        break;
    }
LABEL_12:
    v1 = *(_QWORD *)(v1 + 176);
    if( !v1 )
      return(char)Pcr;
  }
  PerformanceCounter = KeQueryPerformanceCounter(0i64);
  ++*(_DWORD *)(v1 + 116);
  if( PerformanceCounter.QuadPart - *(_QWORD *)(v1 + 104) >= HalpCmciThresholdTime )
  {
    *(LARGE_INTEGER *)(v1 + 104) = PerformanceCounter;
    v4 = 1;
    *(_DWORD *)(v1 + 112) = 1;
  }
  else
  {
    v4 = ++*(_DWORD *)(v1 + 112);
  }
  if( v4 <= HalpCmciThresholdCount )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(0xEui64);
    if( !*(_BYTE *)(v1 + 120) )
    {
      HalpCmciResetState(*(_QWORD *)(v1 + 24), v2);
      KeInsertQueueDpc((PRKDPC)(v1 + 40), 0i64, 0i64);
    }
    LOBYTE(Pcr) = CurrentIrql;
    __writecr8(CurrentIrql);
    goto LABEL_12;
  }
  LODWORD(Pcr) = _InterlockedIncrement(&HalpCmciRevertToPolledMode);
  if( (_DWORD)Pcr == 1 )
  {
    *(_QWORD *)&Src = 0x1674C6857i64;
    *((_QWORD *)&Src + 1) = 0x100000020i64;
    *(_QWORD *)&v8 = 0x80000003204C4148ui64;
    *((_QWORD *)&v8 + 1) = 2i64;
    WheaLogInternalEvent(&Src);
    KeIpiGenericCall((PKIPI_BROADCAST_WORKER)HalpDisableCmciOnProcessor, 0i64);
    LOBYTE(Pcr) = KeInsertQueueDpc((PRKDPC)(v1 + 40), 0i64, 0i64);
  }
  return(char)Pcr;
}

Referenced by:

HalpInterruptDeferredErrorService