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