PopEtProcessSnapshotUpdate
NTSTATUS __stdcall PopEtProcessSnapshotUpdate(INT64 a1){
INT64 v2;
__int64 v3;
INT64 *v4;
int v5;
int v6;
INT64 *v8;
__int64 v9;
INT64 *v10;
v2 = *(_QWORD *)(a1 + 16);
v3 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 2280i64);
PopAcquireRwLockExclusive((_POP_RW_LOCK *)(v2 + 16));
v10 = (INT64 *)PopEtProcessSnapshotFind(a1);
v4 = v10;
if( !v10 )
{
v6 = PopEtProcessSnapshotCreate(a1, &v10);
if( v6 < 0 )
goto LABEL_6;
v5 = *(_DWORD *)a1;
if( *(_DWORD *)a1 == 1 || *(_DWORD *)(v3 + 468) > 1u )
{
v4 = v10;
goto LABEL_3;
}
v4 = v10;
}
PopEtEnergyTrackerUpdateAggregate(v2, (INT64)v4, *(_QWORD *)(a1 + 24), *(unsigned int *)a1);
v5 = *(_DWORD *)a1;
LABEL_3:
if( v5 == 4 )
{
v9 = v4[1] & (-1i64 << (*(_DWORD *)(v2 + 68) & 0x1F));
v8 = (INT64 *)(*(_QWORD *)(v2 + 72)
+ 8i64
* ((37
* (BYTE6(v9)
+ 37
* (BYTE5(v9)
+ 37
* (BYTE4(v9)
+ 37 * (BYTE3(v9) + 37 * (BYTE2(v9) + 37 * (BYTE1(v9) + 37 * ((unsigned __int8)v9 + 11623883)))))))
+ HIBYTE(v9)) & (unsigned int)((*(_DWORD *)(v2 + 68) >> 5) - 1)));
if( (*v4 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
v4 = v10;
while( (*v8 & 1) == 0 )
{
if( (INT64 *)*v8 == v4 )
{
*v8 = *v4;
--*(_DWORD *)(v2 + 64);
*v4 |= 0x8000000000000002ui64;
goto LABEL_17;
}
v8 = (INT64 *)*v8;
}
v4 = v10;
LABEL_17:
PopEtAggregateKeyCleanup(v4 + 2);
ExFreePoolWithTag(v4, 0x54456F50u);
}
else
{
PopEtProcessSnapshotUpdateFromSnapshotContext((__int64)v4, (_QWORD *)a1);
}
v6 = 0;
LABEL_6:
PopReleaseRwLock((_POP_RW_LOCK *)(v2 + 16));
return v6;
}Referenced by:
PopEtEnergyTrackerEnumSnapshotCallback
PopEtProcessEnumSnapshotCallback