KiEndDebugAccumulation
VOID __stdcall KiEndDebugAccumulation(_KPRCB *Prcb){
__int64 v2;
unsigned __int64 v3;
__int64 v4;
__int64 v5;
unsigned int FrequencyBucket;
if( !*((_BYTE *)Prcb + 32) && !PoAllProcIntrDisabled )
{
*((_BYTE *)Prcb + 32) = 1;
v2 = *((_QWORD *)Prcb + 1);
v3 = __rdtsc();
v4 = *((_QWORD *)Prcb + 4056);
v5 = v3 - v4;
*((_QWORD *)Prcb + 4071) += v5;
if( (*(_BYTE *)(v2 + 2) & 0x20) != 0 )
{
FrequencyBucket = PoGetFrequencyBucket((__int64)Prcb);
*((_QWORD *)Prcb + 2 * FrequencyBucket + *((unsigned __int8 *)Prcb + 33208) + 4072) += v5;
v4 = *((_QWORD *)Prcb + 4056);
v2 = *((_QWORD *)Prcb + 1);
}
*((_QWORD *)Prcb + 4056) = v5 + v4;
if( (*(_BYTE *)(v2 + 2) & 2) != 0 )
KiBeginCounterAccumulation((_KTHREAD *)v2, 0);
*((_BYTE *)Prcb + 32) = 0;
}
}Referenced by:
KeThawExecution
KiFreezeTargetExecution