PopEtProcessEnumSnapshotCallback
__int64 __fastcall PopEtProcessEnumSnapshotCallback(_EPROCESS *a1, INT64 a2){
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *v5;
char EnergyValues[432];
memset(EnergyValues, 0i64, sizeof(EnergyValues));
if( !*(_DWORD *)(a2 + 4) && a1 != *(_EPROCESS **)&PsIdleProcess )
PopEtProcessEnumSnapshotCallback(*(_EPROCESS **)&PsIdleProcess, a2);
if( a1->EnergyContext )
{
*(_QWORD *)(a2 + 8) = a1;
*(_QWORD *)(a2 + 24) = EnergyValues;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v5 = (_EX_PUSH_LOCK *)((char *)a1->EnergyContext + 432);
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx(v5, 0i64);
if( a1 == *(_EPROCESS **)&PsIdleProcess )
PopEtIsrDpcQuery((__int64)a1, EnergyValues);
else
PsQueryProcessEnergyValues(a1, (_PROCESS_ENERGY_VALUES *)EnergyValues);
PopEtProcessSnapshotUpdate(a2);
PopReleaseRwLock((_POP_RW_LOCK *)a1->EnergyContext + 27);
*(_QWORD *)(a2 + 8) = 0i64;
++*(_DWORD *)(a2 + 4);
}
return 0i64;
}Referenced by:
PopEtProcessEnumSnapshotCallback