private void StartTracing() { const uint RealTime = 0x00000100; const uint EventRecord = 0x10000000; _logFile = new EventTraceLogfile(); _logFile.LoggerName = _loggerName; _logFile.EventRecordCallback = EventRecordCallback; _logFile.ProcessTraceMode = EventRecord | RealTime; _traceHandle = NativeMethods.OpenTrace(ref _logFile); int error = Marshal.GetLastWin32Error(); if (error != 0) { throw new System.ComponentModel.Win32Exception(error); } _processEventsDelgate = new ProcessTraceDelegate(ProcessTraceInBackground); _asyncResult = _processEventsDelgate.BeginInvoke(_traceHandle, null, _processEventsDelgate); }
private void StartTracing() { const uint RealTime = 0x00000100; const uint EventRecord = 0x10000000; const uint BufferSize = 64; const uint MinBuffers = 20; const uint MaxBuffers = 200; const uint FlushTimerSeconds = 1; int status; if (!LoadExistingEventTraceProperties()) { _eventTraceProperties.SetParameters(RealTime, BufferSize, MinBuffers, MaxBuffers, FlushTimerSeconds); // Start trace session ulong unsafeSessionHandle; status = NativeMethods.StartTrace( out unsafeSessionHandle, _loggerName, ref _eventTraceProperties); if (status != 0) { throw new Win32Exception(status); } _sessionHandle = new SessionSafeHandle(unsafeSessionHandle, _loggerName); var emptyGuid = Guid.Empty; var windows7Version = new Version(6, 1, 7600); if (Environment.OSVersion.Version.CompareTo(windows7Version) >= 0) { const int TimeToWaitForInitialize = 10 * 1000; var enableParameters = new EnableTraceParameters { Version = 1, EnableProperty = EventEnableProperty.Sid }; // ENABLE_TRACE_PARAMETERS_VERSION status = NativeMethods.EnableTraceEx2( unsafeSessionHandle, ref _eventProviderId, 1, // controlCode - EVENT_CONTROL_CODE_ENABLE_PROVIDER (byte)Level, MatchAnyKeyword, 0, // matchAnyKeyword TimeToWaitForInitialize, ref enableParameters); } else { status = NativeMethods.EnableTraceEx( ref _eventProviderId, ref emptyGuid, // sourceId unsafeSessionHandle, 1, // isEnabled (byte)Level, MatchAnyKeyword, 0, // matchAllKeywords EventEnableProperty.Sid, IntPtr.Zero); } if (status != 0) { throw new Win32Exception(status); } } _logFile = new EventTraceLogfile { LoggerName = _loggerName, EventRecordCallback = EventRecordCallback, ProcessTraceMode = EventRecord | RealTime }; var unsafeTraceHandle = NativeMethods.OpenTrace(ref _logFile); status = Marshal.GetLastWin32Error(); if (status != 0) { throw new Win32Exception(status); } _traceHandle = new TraceSafeHandle(unsafeTraceHandle); _processEventsDelgate = ProcessTraceInBackground; _asyncResult = _processEventsDelgate.BeginInvoke(_traceHandle, null, _processEventsDelgate); }