PopEtEnergyTrackerUpdateAggregate
NTSTATUS __stdcall PopEtEnergyTrackerUpdateAggregate(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
int v7;
NTSTATUS result;
_DWORD *v9;
int v10;
int v11;
UINT64 UnbiasedInterruptTime;
int v13;
unsigned __int64 v14;
unsigned int v15;
int v16;
INT64 v17;
INT64 v18[54];
v17 = 0i64;
v7 = a4;
memset(v18, 0i64, sizeof(v18));
v16 = 0;
result = PopEtEnergyValuesDeltaCalculate(a2 + 48, (_QWORD *)a3, (__int64)v18, &v16);
if( !v16 )
{
PopEtAggregateGet(a1, (UINT8 *)(a2 + 16), &v17);
v9 = (_DWORD *)v17;
PsAddProcessEnergyValues(v17 + 48, (INT64)v18);
v10 = *(_DWORD *)(a2 + 484);
if( v10 >= 0 )
{
*(_DWORD *)(a2 + 484) = v10 | 0x80000000;
++v9[123];
}
++v9[120];
v11 = *(_DWORD *)(a2 + 484) ^ (*(_DWORD *)(a2 + 484) ^ (*(_DWORD *)(a2 + 484) + 1)) & 0x7FFFFFFF;
*(_DWORD *)(a2 + 484) = v11;
if( (v11 & 0x7FFFFFFF) == 1 )
++v9[124];
switch( v7 )
{
case 2:
++v9[121];
break;
case 3:
++v9[122];
break;
case 4:
++v9[125];
break;
}
if( (*(_DWORD *)(a3 + 108) & 0x7FFFFFFF) != 0 )
v9[127] |= 1u;
if( (*(_DWORD *)(a3 + 116) & 0x7FFFFFFF) != 0 )
v9[127] |= 2u;
UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
v13 = *(_DWORD *)(a1 + 596);
v14 = UnbiasedInterruptTime / 0x2710;
v15 = UnbiasedInterruptTime / 0x2710 - v13;
if( (unsigned int)(UnbiasedInterruptTime / 0x2710) - *(_DWORD *)(a2 + 488) <= v15 )
v13 = *(_DWORD *)(a2 + 488);
result = v14 - v13;
v9[126] += v14 - v13;
if( v9[126] > v15 )
v9[126] = v15;
*(_DWORD *)(a2 + 488) = v14;
}
return result;
}Referenced by:
PopEtProcessSnapshotUpdate