EtwpUpdatePerProcessTracing

VOID __stdcall EtwpUpdatePerProcessTracing(
        _WMI_LOGGER_INFORMATION *LoggerInfo,
        UINT64 LoggerId,
        UINT64 UmglIndex,
        UINT64 a4){
  __int64 v4; 
  char v5; 
  _TRACE_ENABLE_FLAG_EXT_ITEM *FlagExtension; 
  _TRACE_ENABLE_FLAG_EXT_ITEM *v9; 
  unsigned __int16 v10; 
  unsigned int v11; 
  __int64 v12; 
  _EPROCESS *Process; 
  __int64 Context; 
  __int16 v15; 

  v4 = (unsigned int)a4;
  v5 = UmglIndex;
  Context = 0i64;
  Process = 0i64;
  v15 = 0;
  KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 1376, 0, 0, 0, 0i64);
  FlagExtension = EtwpGetFlagExtension(LoggerInfo, 2u);
  if( FlagExtension )
  {
    v9 = FlagExtension + 1;
    LODWORD(Context) = v4;
    v10 = 4 * FlagExtension->Offset - 4;
    BYTE4(Context) = 1;
    v11 = v10 >> 2;
    if( v11 )
    {
      v12 = v11;
      do
      {
        if( PsLookupProcessByProcessId((VOID *)*(_DWORD *)v9, &Process) >= 0 )
        {
          EtwpUpdateProcessTracingCallback((ULONG_PTR)Process, &Context);
          ObfDereferenceObjectWithTag(Process, 0x746C6644ui64);
        }
        ++v9;
        --v12;
      }
      while( v12 );
    }
  }
  LOBYTE(v15) = v5;
  if( LoggerId == EtwpHostSiloState )
    *(_WORD *)(2 * v4 - 0x87FFFFFFC80i64) = v15;
  else
    *(_WORD *)(*(_QWORD *)(*(_QWORD *)(LoggerId + 8) + 1128i64) + 2 * v4 + 550) = v15;
  KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 1376), 0);
}

Referenced by:

EtwpStartLogger
EtwpUpdateTrace