EtwpProviderArrivalCallback

INT64 __fastcall EtwpProviderArrivalCallback(_WMI_LOGGER_CONTEXT *LoggerContext, CHAR Mode, _ETW_REG_ENTRY *RegEntry){
  void *Callback; 
  unsigned int v7; 
  int v8; 
  char *v9; 
  int FileNameForAddress; 
  UINT64 a4; 
  _UNICODE_STRING v13; 
  char v14[512]; 
  Callback = RegEntry->Callback;
  *(_DWORD *)(&v13.MaximumLength + 1) = 0;
  v7 = 0;
  if( !Callback )
    return 3221225793i64;
  if( (RegEntry->Flags & 0x20) != 0 || (*((_DWORD *)LoggerContext + 208) & 0x2000000) != 0 )
  {
    *(_DWORD *)&v13.Length = 0x2000000;
    v13.Buffer = (wchar_t *)v14;
    if( Mode )
      FileNameForAddress = MmGetFileNameForAddress(Callback, &v13);
    else
      FileNameForAddress = RtlPcToFilePath(Callback, &v13);
    v7 = FileNameForAddress;
    if( FileNameForAddress >= 0 )
      EtwpTrackBinaryForSession((INT64)LoggerContext, (const VOID **)&v13, (INT64)&RegEntry->GuidEntry->Guid);
    if( (char *)v13.Buffer != v14 )
      ExFreePoolWithTag(v13.Buffer, 0);
  }
  if( (RegEntry->Flags & 8) == 0 )
    return v7;
  if( (*((_DWORD *)LoggerContext + 3) & 0x80u) == 0 )
  {
    LODWORD(a4) = 512;
    *(_QWORD *)&v13.Length = v14;
    v8 = EtwpLocateDbgIdForRegEntry(Mode, (INT64)RegEntry, (UINT8 **)&v13, &a4);
    v9 = *(char **)&v13.Length;
    v7 = v8;
    if( v8 >= 0 )
    {
      EtwpTrackDebugIdForSession(LoggerContext, *(_QWORD *)&v13.Length, (unsigned int)a4);
      if( (*((_DWORD *)LoggerContext + 3) & 0x80000) != 0
        && (!(_BYTE)KdDebuggerNotPresent && !KdPitchDebugger || KdEventLoggingPresent) )
      {
        EtwpSendDbgId(LoggerContext);
      }
    }
    if( v9 != v14 )
      ExFreePoolWithTag(v9, 0);
    return v7;
  }
  return 3221225659i64;
}

Referenced by:

EtwpAddRegEntryToGroup
EtwpEnableGuid
EtwpTrackGuidEntryRegistrations
EtwpTrackProviderBinary
EtwpTrackProviderRegistration