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