コード例 #1
0
        /// <summary>
        /// Starts the trace safe.
        /// </summary>
        /// <param name="logFileMode">The log file mode.</param>
        /// <param name="logFileMaxSize">Size of the log file max.</param>
        /// <param name="logFileName">Name of the log file.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
        public bool StartTraceSafe(
            NativeMethods.EventTraceFileMode logFileMode = NativeMethods.EventTraceFileMode.RealTime,
            uint logFileMaxSize = 0, string logFileName = null)
        {
            if (QueryTrace(_sessionName))
            {
                StopTrace(_sessionName);
            }

            if (!StartTrace(logFileMode, logFileMaxSize, logFileName))
            {
                CleanTrace(_sessionName);

                if (!StartTrace(logFileMode, logFileMaxSize, logFileName))
                {
                    CDFMonitor.Instance.EtwTraceClean(true);

                    if (!StartTrace(logFileMode, logFileMaxSize, logFileName))
                    {
                        return(false);
                    }
                }
            }

            return(Running = true);
        }
コード例 #2
0
        /// <summary>
        /// Start the ETW session.
        /// </summary>
        /// <param name="logFileMode">The log file mode.</param>
        /// <param name="logFileMaxSize">Size of the log file max.</param>
        /// <param name="logFileName">Name of the log file.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
        public bool StartTrace(NativeMethods.EventTraceFileMode logFileMode = NativeMethods.EventTraceFileMode.RealTime,
                               uint logFileMaxSize = 0, string logFileName = null)
        {
            Debug.Assert(_handle == 0, "_handle == 0");

            NativeMethods.EventTraceProperties properties = CommonEventTraceProperties();
            properties.WNode.Flags         = NativeMethods.WNodeFlags.TracedGuid;
            properties.WNode.ClientContext = 1;
            properties.LogFileMode         = logFileMode;
            properties.FlushTimer          = 1;

            if (logFileMode != NativeMethods.EventTraceFileMode.RealTime)
            {
                properties.MaximumFileSize = logFileMaxSize;

                //32 bit different
                uint offset = 4;
                if (IntPtr.Size == 8) //64 bit
                {
                    offset = 0;
                }
                properties.LogFileNameOffset = NativeMethods.EventTracePropertiesStructSize +
                                               (NativeMethods.EventTracePropertiesStringSize) - offset;
                properties.LogFileName = logFileName;
                properties.FlushTimer  = 0;
            }
            CDFMonitor.LogOutputHandler("DEBUG:ETWController.StartTrace:starting trace.");
            uint processResult = NativeMethods.StartTrace(out _handle, _sessionName, ref properties);

            int lastError = Marshal.GetLastWin32Error();

            if (!NativeMethods.IsValidHandle(_handle))
            {
                CDFMonitor.LogOutputHandler("DEBUG:StartTrace: exception. lastError:" + lastError.ToString());
                return(false);
            }

            if (processResult != NativeMethods.ERROR_SUCCESS &&
                processResult != NativeMethods.ERROR_CANCELLED &&
                processResult != NativeMethods.ERROR_ALREADY_EXISTS)
            {
                CDFMonitor.LogOutputHandler("StartTrace: exception. process result:" + processResult.ToString());

                return(false);
            }

            return(true);
        }