private EtwEventLevel ConvertTraceEventTypeToEventLevel(TraceEventType eventType)
        {
            EtwEventLevel verbose = EtwEventLevel.Verbose;

            switch (eventType)
            {
            case TraceEventType.Critical:
                return(EtwEventLevel.Critical);

            case TraceEventType.Error:
                return(EtwEventLevel.Error);

            case (TraceEventType.Error | TraceEventType.Critical):
                return(verbose);

            case TraceEventType.Warning:
                return(EtwEventLevel.Warning);

            case TraceEventType.Information:
                return(EtwEventLevel.Information);

            case TraceEventType.Verbose:
                return(EtwEventLevel.Verbose);
            }
            return(verbose);
        }
        private void LogToEtw(TraceEventType eventType, int id, string eventMessage)
        {
            EtwEventLevel   level           = this.ConvertTraceEventTypeToEventLevel(eventType);
            EventDescriptor eventDescriptor = new EventDescriptor(0xf01c, 0, 0, (byte)level, 0, 0, 0L); // From DiagnosticMonitorTraceListener

            try
            {
                this.m_eventProvider.WriteEvent(ref eventDescriptor, new object[] { (ulong)id, eventMessage });
            }
            catch (ArgumentException)
            {
            }
            catch (System.ComponentModel.Win32Exception)
            {
            }
        }