KiResumeClockTimer
VOID __stdcall KiResumeClockTimer(){
char v0;
_KI_CLOCK_STATE v1;
__int64 v2;
INT64 v3;
INT64 v4;
UINT64 RequestedIncrement;
UINT64 DeliveredIncrement;
INT64 CurrentQpc;
DeliveredIncrement = 0i64;
v0 = 0;
v1 = KiClockState;
RequestedIncrement = 0i64;
if( KeGetCurrentPrcb()->Number == (_DWORD)KiClockTimerOwner )
{
v0 = 1;
}
else if( !KiClockTimerPerCpu )
{
return;
}
off_140C00880[0]();
LOBYTE(v2) = v0;
((void(__fastcall *)(__int64))off_140C00878[0])(v2);
if( v0 )
{
++dword_140C31344;
KeGetCurrentPrcb()->ClockOwner = 1;
LODWORD(v3) = RtlGetInterruptTimePrecise(&CurrentQpc);
v4 = v3;
KiRestoreClockTickRate(v3, &RequestedIncrement);
if( v1 == ClockStatePendingPeriodic )
v1 = _InterlockedExchange((volatile __int32 *)&KiClockState, 0);
KiEventClockStateChange(ClockStatePeriodic, v1, &DeliveredIncrement, &RequestedIncrement);
KiClockTimerNextTickTime = v4 + (unsigned int)KeTimeIncrement;
}
}Referenced by:
KeResumeClockTimer
KeResumeClockTimerSafe