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