KiUpdateTotalCyclesCurrentThread
UINT64 __stdcall KiUpdateTotalCyclesCurrentThread(_KPRCB *Prcb, _ETHREAD *Thread, UINT64 *TimeStamp){
unsigned __int64 v6;
UINT64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
bool v10;
Prcb->NestingLevel = 1;
v6 = __rdtsc();
v7 = v6 - Prcb->StartCycles;
v8 = v7 + Thread->Tcb.CycleTime;
v9 = v7 + Thread->Tcb.CurrentRunTime;
Thread->Tcb.CycleTime = v8;
if( v9 > 0xFFFFFFFF )
LODWORD(v9) = -1;
Prcb->StartCycles = v6;
v10 = (Thread->Tcb.gap0[2] & 0x3E) == 0;
Thread->Tcb.CurrentRunTime = v9;
if( !v10 )
KiEndThreadAccountingPeriod(Prcb, &Thread->Tcb, v7);
if( TimeStamp )
*TimeStamp = v6;
KiStartThreadCycleAccumulation(Prcb, &Thread->Tcb, 0);
return v8;
}Referenced by:
KeBoostPriorityThread
KeDelayExecutionThread
KeRemovePriQueue
KeSetActualBasePriorityThread
KeSetBasePriorityThread
KeSetPriorityAndQuantumProcess
KeSetPriorityThread
KeSetThreadChargeOnlySchedulingGroup
KeUpdateTotalCyclesCurrentThread
KeYieldExecution
KiCompleteDirectSwitchThread
KiReduceByEffectiveIdleSmtSet
KiRemoveThreadFromSchedulingGroup
KiStartDebugAccumulation
PspRevertContainerImpersonation