PopEtProcessEnumSnapshotCallback

INT64 __fastcall PopEtProcessEnumSnapshotCallback(_QWORD *a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  UINT64 v5; 
  INT64 result[54]; 
  memset((INT64)result, 0i64);
  if( !*(_DWORD *)(a2 + 4) && a1 != PsIdleProcess )
    PopEtProcessEnumSnapshotCallback(PsIdleProcess, a2);
  if( a1[285] )
  {
    *(_QWORD *)(a2 + 8) = a1;
    *(_QWORD *)(a2 + 24) = result;
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    v5 = a1[285] + 432i64;
    --*((_WORD *)CurrentThread + 242);
    ExAcquirePushLockSharedEx(v5, 0i64);
    if( a1 == PsIdleProcess )
      PopEtIsrDpcQuery((INT64)a1, result);
    else
      PsQueryProcessEnergyValues((_EPROCESS *)a1, (_PROCESS_ENERGY_VALUES *)result);
    PopEtProcessSnapshotUpdate(a2);
    PopReleaseRwLock(a1[285] + 432i64);
    *(_QWORD *)(a2 + 8) = 0i64;
    ++*(_DWORD *)(a2 + 4);
  }
  return 0i64;
}

Referenced by:

PopEtProcessEnumSnapshotCallback