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