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