/// <summary> /// Returns true to ensure that events continue to be processed. /// </summary> /// <param name="eventTraceLogfile">The event trace logfile.</param> /// <returns>true</returns> /// <remarks> /// This method is called by ETW for each buffer in this session. /// </remarks> private bool OnBufferRead(ref NativeMethods.EventTraceLogFile eventTraceLogfile) { _missedControllerEvents = eventTraceLogfile.LogfileHeader.BufferUnion.EventsLost; // Always return true to continue processing events _bufferCallback = eventTraceLogfile; _onBufferReadCount++; return(_running); }
/// <summary> /// Opens an real-time ETW session for reading. /// </summary> /// <param name="logFileName">Name of the log file.</param> public void OpenTrace(string logFileName = null) { Debug.Assert(_handle[0] == 0, "_handle == 0"); _onBufferReadCount = 0; var logfile = new NativeMethods.EventTraceLogFile(); logfile.BufferCallback = _eventTraceBufferCallback; logfile.EventCallback = _eventCallback; if (string.IsNullOrEmpty(logFileName)) { logfile.LoggerName = _sessionName; logfile.LogFileMode = (uint)NativeMethods.EventTraceFileMode.RealTime; } else { logfile.LogfileName = logFileName; } CDFMonitor.LogOutputHandler("DEBUG:Consumer.OpenTrace: opening trace"); // Open sessions with Etw OpenTrace method _handle[0] = NativeMethods.OpenTrace(ref logfile); int lastError = Marshal.GetLastWin32Error(); if (!NativeMethods.IsValidHandle(_handle[0])) { //throw new Win32Exception(lastError); CDFMonitor.LogOutputHandler("OpenTrace:Failed to open trace:" + lastError.ToString()); _running = false; } else { _running = true; } }