PpmResetPerfTimes
VOID __stdcall PpmResetPerfTimes(_KPRCB *Prcb){
__int64 v1;
_ETHREAD *NextThread;
unsigned __int64 *p_QuantumTarget;
_KPRCB *v4;
NextThread = Prcb->NextThread;
if( NextThread )
{
p_QuantumTarget = &NextThread->Tcb.QuantumTarget;
if( BYTE4(Prcb->PriorityState) )
{
v4 = (_KPRCB *)((char *)Prcb - 33128);
PpmResetPerformanceAccumulation((_KPRCB *)((char *)Prcb - 33128));
PpmSnapPerformanceAccumulation(v4, 1u, 0, 0, (_PROC_PERF_CHECK_SNAP *)&NextThread->Tcb.QuantumTarget);
}
else
{
LOBYTE(v1) = 1;
PpmHvSnapPerformanceAccumulation(Prcb, v1, 0i64, &NextThread->Tcb.QuantumTarget);
}
*(_OWORD *)&NextThread->Tcb.gapD8[8] = *(_OWORD *)p_QuantumTarget;
*(_OWORD *)&NextThread->Tcb.Teb = *(_OWORD *)&NextThread->Tcb.StackLimit;
*(_OWORD *)NextThread->Tcb.Timer.gap0 = *(_OWORD *)&NextThread->Tcb.ThreadLock;
*(_OWORD *)&NextThread->Tcb.Timer.gap0[16] = *(_OWORD *)&NextThread->Tcb.CurrentRunTime;
NextThread->Tcb.Timer.TimerListEntry = *(_LIST_ENTRY *)&NextThread->Tcb.StateSaveArea;
*(_OWORD *)&NextThread->Tcb.Timer.Dpc = *(_OWORD *)&NextThread->Tcb.WaitRegister.Flags;
*(_QWORD *)&NextThread->Tcb.gap0[8] = *p_QuantumTarget;
*(_QWORD *)NextThread->Tcb.gap0 = NextThread->Tcb.InitialStack;
*(_QWORD *)&NextThread->Tcb.gap0[16] = NextThread->Tcb.StackLimit;
LODWORD(NextThread->Tcb.SListFaultAddress) = *(&NextThread->Tcb.MiscFlags + 1);
}
}Referenced by:
PpmCheckProcessorInit
PpmCheckReset
PpmResetPerfEngineForProcessorEx