KiEndCounterAccumulation

VOID __stdcall KiEndCounterAccumulation(_ETHREAD *Thread){
  _QWORD *SparePtr; 
  __int64 v2; 
  __int64 v3; 
  unsigned int *v4; 
  char *v5; 
  __int64 v6; 
  unsigned __int64 v7; 

  SparePtr = Thread->Tcb.WaitBlock[0].SparePtr;
  v2 = SparePtr[4];
  if( v2 )
  {
    v3 = 1i64;
    if( KiHwCountersCount )
    {
      v4 = KiHwCounters;
      v5 = (char *)(SparePtr + 6);
      v6 = (unsigned int)KiHwCountersCount;
      do
      {
        if( (v2 & v3) != 0 )
        {
          v7 = __readpmc(*v4);
          *((_QWORD *)v5 + 1) += (unsigned int)(v7 - *(_DWORD *)v5);
          *(_QWORD *)v5 = v7;
        }
        v3 *= 2i64;
        ++v4;
        v5 += 24;
        --v6;
      }
      while( v6 );
    }
  }
}

Referenced by:

KiDirectSwitchThread
KiEndThreadAccountingPeriod
KiSwapThread