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