EtwpPsProvProcessEnumCallback

NTSTATUS __stdcall EtwpPsProvProcessEnumCallback(_EPROCESS *Process, VOID *Context){
  char v4; 
  _EPROCESS *v5; 
  bool v6; 
  VOID *v7; 
  UINT64 ProcessInfoFlags; 
  _ETW_OTHER_PROCESS_INFO OtherInfo; 
  _KAPC_STATE ApcState; 
  char PackageInfo[408]; 

  OtherInfo = 0i64;
  v4 = 0;
  memset(&ApcState, 0, sizeof(ApcState));
  memset(PackageInfo, 0i64, sizeof(PackageInfo));
  if( !(unsigned int)EtwpIsProcessZombie(Process) )
  {
    if( *((_BYTE *)Context + 9) )
    {
      if( (*(_BYTE *)Context & 1) != 0 && Process != *(_EPROCESS **)&PsIdleProcess && (Process->Flags3 & 0x1000) == 0 )
        PsSetProcessTelemetryAppState(v5, PsTelemetryAppStateHeartbeat);
    }
    else
    {
      v6 = Process == *(_EPROCESS **)&PsIdleProcess;
      *((_BYTE *)Context + 8) = 0;
      if( !v6
        && KeGetCurrentThread()->ApcState.Process != Process
        && ExAcquireRundownProtection(&Process->RundownProtect) )
      {
        KiStackAttachProcess(Process, 0i64, &ApcState);
        v4 = 1;
        *((_BYTE *)Context + 8) = 1;
      }
      if( (*(_BYTE *)Context & 0x10) != 0 )
      {
        LODWORD(ProcessInfoFlags) = 0;
        v7 = PsReferencePrimaryToken(Process);
        EtwpQueryTokenPackageInfo(v7, (_ETW_PACKAGE_IDENTITY *)PackageInfo, &ProcessInfoFlags);
        if( *((_BYTE *)Context + 8) )
          EtwpQueryProcessOtherInfo(Process, &OtherInfo);
        ObFastDereferenceObject(&Process->Token, v7);
        EtwpPsProvTraceProcess(
          Process,
          (unsigned int)ProcessInfoFlags,
          (_ETW_PACKAGE_IDENTITY *)PackageInfo,
          &OtherInfo,
          0x303u);
      }
      if( v4 )
      {
        KiUnstackDetachProcess(&ApcState, 0i64);
        ExReleaseRundownProtection(&Process->RundownProtect);
      }
    }
  }
  return 0;
}

Referenced by:

EtwpPsProvCaptureState