PopIdleWakeStopActiveIntervalAccounting
INT64 __stdcall PopIdleWakeStopActiveIntervalAccounting(INT64 result, INT64 a2){
INT64 v2;
INT64 v5;
BYTE *WakeSource;
BYTE *v7;
UINT64 v8;
INT64 v9;
UINT64 v10;
UINT64 v11;
UINT64 v12;
UINT64 v13;
UINT64 *v14;
v2 = *(unsigned int *)result;
if( (v2 & 0x10) != 0 )
{
v5 = a2 - *(_QWORD *)(result + 8);
if( (v2 & 2) != 0 )
{
*(_QWORD *)(result + 16) += v5;
}
else if( (v2 & 1) != 0 )
{
*(_QWORD *)(result + 24) += v5;
}
else
{
*(_QWORD *)(result + 32) += v5;
}
if( (v2 & 8) == 0 )
{
LODWORD(v2) = v2 | 4;
*(_DWORD *)result = v2;
}
WakeSource = PopIdleWakeFindOrAllocateWakeSource(result, *(unsigned int *)(result + 40), result + 48, (v2 & 4) != 0);
v7 = WakeSource;
++*((_DWORD *)WakeSource + 78);
*((_QWORD *)WakeSource + 42) += *(_QWORD *)(result + 192);
v8 = *(_QWORD *)(result + 192);
if( v8 < *((_QWORD *)WakeSource + 40) )
{
*((_QWORD *)WakeSource + 40) = v8;
v8 = *(_QWORD *)(result + 192);
}
if( v8 > *((_QWORD *)WakeSource + 41) )
{
*((_QWORD *)WakeSource + 41) = v8;
v8 = *(_QWORD *)(result + 192);
}
PopIdleWakeInsertTimeInterval(v8, 9ui64, (INT64)(WakeSource + 344), 0i64, &PopIdleWakeIdleAccountingBucketLimitsQpc);
if( *((_DWORD *)v7 + 78) > 1u )
PopIdleWakeInsertTimeInterval(
a2 - *((_QWORD *)v7 + 53),
(unsigned int)(v9 + 11),
(INT64)(v7 + 380),
v9,
&PopIdleWakePeriodAccountingBucketLimitsQpc);
*((_QWORD *)v7 + 53) = a2;
KeAddProcessorAffinityEx((_WORD *)v7 + 72, *(_DWORD *)(result + 200));
v10 = *(_QWORD *)(result + 16) + *(_QWORD *)(result + 24) + *(_QWORD *)(result + 32);
*((_QWORD *)v7 + 54) += v10;
PopIdleWakeInsertTimeInterval(
v10,
5ui64,
(INT64)(v7 + 440),
(INT64)(v7 + 464),
&PopIdleWakeSourceActiveBucketLimitsQpc);
*((_QWORD *)v7 + 63) += *(_QWORD *)(result + 16);
PopIdleWakeInsertTimeInterval(
*(_QWORD *)(result + 16),
v11,
(INT64)(v7 + 512),
(INT64)(v7 + 536),
&PopIdleWakeSourceActivatorBucketLimitsQpc);
*((_QWORD *)v7 + 72) += *(_QWORD *)(result + 24);
PopIdleWakeInsertTimeInterval(
*(_QWORD *)(result + 24),
v12,
(INT64)(v7 + 584),
(INT64)(v7 + 608),
&PopIdleWakeSourceDeviceBucketLimitsQpc);
*((_QWORD *)v7 + 81) += *(_QWORD *)(result + 32);
PopIdleWakeInsertTimeInterval(*(_QWORD *)(result + 32), v13, (INT64)(v7 + 656), (INT64)(v7 + 672), v14);
return memset(result, 0i64);
}
return v2;
}Referenced by:
PopIdleWakeNotifyModernStandbyExit
PopIdleWakeNotifyWakeSource