Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
            }
        }