KiResumeClockTimer
INT64 __stdcall KiResumeClockTimer(){
char v0;
int v1;
INT64 result;
__int64 v3;
INT64 v4;
INT64 v5;
__int64 a2;
__int64 v7;
INT64 CurrentQpc;
v7 = 0i64;
v0 = 0;
v1 = KiClockState;
a2 = 0i64;
result = (unsigned int)KiClockTimerOwner;
if( *((_DWORD *)KeGetCurrentPrcb() + 9) == (_DWORD)KiClockTimerOwner )
{
v0 = 1;
}
else if( !KiClockTimerPerCpu )
{
return result;
}
off_140C00880[0]();
LOBYTE(v3) = v0;
result = ((__int64(__fastcall *)(__int64))off_140C00878[0])(v3);
if( v0 )
{
++dword_140C31344;
*((_BYTE *)KeGetCurrentPrcb() + 33) = 1;
LODWORD(v4) = RtlGetInterruptTimePrecise(&CurrentQpc);
v5 = v4;
KiRestoreClockTickRate(v4, &a2);
if( v1 == 2 )
_InterlockedExchange(&KiClockState, 0);
KiEventClockStateChange();
result = v5 + (unsigned int)KeTimeIncrement;
KiClockTimerNextTickTime = result;
}
return result;
}Referenced by:
KeResumeClockTimer
KeResumeClockTimerSafe