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