PspFoldProcessAccountingIntoJob

INT64 __fastcall PspFoldProcessAccountingIntoJob(INT64 a1, INT64 a2, INT64 *a3){
  INT64 v6; 
  INT64 v7; 
  __int64 v8; 
  _QWORD *v9; 
  _QWORD *v10; 
  unsigned __int64 v11; 
  INT64 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  INT64 result[54]; 
  memset((INT64)result, 0i64);
  v6 = a3[1];
  v7 = *a3;
  *(_QWORD *)(a1 + 1024) += a3[2];
  *(_QWORD *)(a1 + 176) += a3[3];
  *(_QWORD *)(a1 + 160) += v6;
  *(_QWORD *)(a1 + 168) += v7;
  *(_QWORD *)(a1 + 184) += v6;
  v8 = 6i64;
  *(_QWORD *)(a1 + 192) += v7;
  v9 = (_QWORD *)(a1 + 488);
  *(_QWORD *)(a1 + 200) += a3[4];
  do
  {
    *v9 += *(_QWORD *)((char *)v9 + (_QWORD)a3 - a1 - 448);
    ++v9;
    --v8;
  }
  while( v8 );
  *(_DWORD *)(a1 + 208) += *(_DWORD *)(a2 + 1668);
  *(_QWORD *)(a1 + 1584) += a3[11];
  *(_QWORD *)(a1 + 1592) += a3[12];
  v10 = *(_QWORD **)(a2 + 2232);
  if( v10 )
  {
    *(_QWORD *)(a1 + 536) += *v10;
    *(_QWORD *)(a1 + 544) += v10[1];
    *(_QWORD *)(a1 + 552) += v10[2];
    *(_QWORD *)(a1 + 560) += v10[3];
    *(_QWORD *)(a1 + 568) += v10[4];
  }
  v11 = *(_QWORD *)(a2 + 1616);
  if( v11 > *(_QWORD *)(a1 + 600) )
  {
    _m_prefetchw((const void *)(a1 + 600));
    v13 = *(_QWORD *)(a1 + 600);
    do
    {
      v14 = v13;
      v13 = _InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 600), v11, v13);
    }
    while( v13 != v14 && v11 > v13 );
  }
  LODWORD(v12) = PoEnergyEstimationEnabled();
  if( (_BYTE)v12 )
  {
    PsQueryProcessEnergyValues((_EPROCESS *)a2, (_PROCESS_ENERGY_VALUES *)result);
    return PsAddProcessEnergyValues(*(_QWORD *)(a1 + 1328), (INT64)result);
  }
  return v12;
}

Referenced by:

PspRemoveProcessFromJobChain