HalpTimerClockIpiRoutine

NTSTATUS __stdcall HalpTimerClockIpiRoutine(_KINTERRUPT *Interrupt, VOID *ServiceContext){
  INT64 v2; 
  unsigned __int64 CurrentPrcb; 
  __int64 v4; 
  _QWORD *v5; 

  KeClockInterruptNotify(Interrupt->TrapFrame, Interrupt->TrapFrame->PreviousIrql);
  CurrentPrcb = (unsigned __int64)KeGetCurrentPrcb();
  if( *(_BYTE *)(CurrentPrcb + 33) && HalpWatchdogTimer )
  {
    CurrentPrcb = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C4A350;
    if( *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C4A350 > (unsigned __int64)qword_140C4A340 )
      CurrentPrcb = off_140C008C0[0]();
    if( qword_140C4A340 == -1 )
      HalpTimerWatchdogTriggerSystemReset(0, v2);
  }
  LODWORD(CurrentPrcb) = KeGetPcr()->Prcb.Number;
  v4 = 3 * CurrentPrcb;
  LODWORD(CurrentPrcb) = qword_140C4AD08;
  v5 = (_QWORD *)(qword_140C4AD08 + 8 * v4);
  if( (_QWORD *)*v5 != v5 )
  {
    CurrentPrcb = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v5[2];
    if( CurrentPrcb >= 0x4C4B40 )
    {
      ((void(__fastcall *)(_QWORD, _QWORD))off_140C007D8[0])(0i64, 0i64);
      LODWORD(CurrentPrcb) = KUSER_SHARED_DATA.InterruptTime.LowPart;
      v5[2] = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
    }
  }
  LOBYTE(CurrentPrcb) = 1;
  return CurrentPrcb;
}

Referenced by:

No references.