PopEtEnergyTrackerCleanupAggregates
UINT64 __stdcall PopEtEnergyTrackerCleanupAggregates(INT64 a1){
UINT64 *v1;
UINT64 *v3;
UINT64 v4;
UINT64 result;
UINT64 *v6;
UINT64 v7;
INT64 *v8;
UINT64 *i;
v1 = *(UINT64 **)(a1 + 56);
v3 = v1;
while( 1 )
{
if( !v3 )
goto LABEL_6;
v4 = *v3;
result = *v3 & 0x8000000000000002ui64;
if( result == 0x8000000000000002ui64 )
{
result = MEMORY[0];
v4 = *v3;
}
if( (v4 & 1) == 0 )
{
v3 = (UINT64 *)v4;
}
else
{
LABEL_6:
v6 = v1 + 1;
result = *(_QWORD *)(a1 + 56);
v7 = result + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 52) >> 5);
while( (unsigned __int64)v6 < v7 )
{
result = *v6;
if( (*v6 & 1) == 0 )
{
v3 = (UINT64 *)*v6;
v1 = v6;
v4 = *v6;
goto LABEL_10;
}
++v6;
}
v4 = 0i64;
}
LABEL_10:
if( !v4 )
return result;
v8 = (INT64 *)v3;
for( i = v1; (*i & 1) == 0; i = (UINT64 *)*i )
{
if( (UINT64 *)*i == v3 )
{
*i = *v3;
--*(_DWORD *)(a1 + 48);
*v3 |= 0x8000000000000002ui64;
v3 = i;
goto LABEL_15;
}
}
v8 = 0i64;
LABEL_15:
if( v8 == (INT64 *)(a1 + 80) )
{
*(_DWORD *)(a1 + 636) &= ~4u;
memset((VOID *)(a1 + 128), 0i64, 0x1C8u);
}
else
{
PopEtAggregateKeyCleanup(v8 + 2);
ExFreePoolWithTag(v8, 0x54456F50u);
}
}
}Referenced by:
PopEtEnergyTrackerCleanup
PopEtEnergyTrackerQuery