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.