public static Task <bool> RealTimeTraceEventSessionAsync ( string providerName , string sessionName , string tracingFileName = null , string[] traceEvents = null , Action < long , TraceEventDispatcher , TraceEventSession , TraceEvent > onOneEventTracedOnceProcessAction = null , TraceEventProviderOptions traceEventProviderOptions = null , TraceEventSessionOptions traceEventSessionOptions = TraceEventSessionOptions.Create , TraceEventSourceType traceEventSourceType = TraceEventSourceType.MergeAll , TraceEventLevel traceEventLevel = TraceEventLevel.Always , ulong matchKeywords = ulong.MaxValue , bool needCountHits = false ) { return (Task .Factory .StartNew <bool> ( () => { return RealTimeTraceEventSession ( providerName , sessionName , tracingFileName , traceEvents , onOneEventTracedOnceProcessAction , traceEventProviderOptions , traceEventSessionOptions , traceEventSourceType , traceEventLevel , matchKeywords , needCountHits ); } , TaskCreationOptions.LongRunning | TaskCreationOptions.DenyChildAttach )); }
public bool RealTimeTraceEventSession ( string providerName , string sessionName , string tracingFileName = null , string[] traceEvents = null , Action < long , TraceEventDispatcher , TraceEventSession , TraceEvent > onOneEventTracedOnceProcessAction = null , TraceEventProviderOptions traceEventProviderOptions = null , TraceEventSessionOptions traceEventSessionOptions = TraceEventSessionOptions.Create , TraceEventSourceType traceEventSourceType = TraceEventSourceType.MergeAll , TraceEventLevel traceEventLevel = TraceEventLevel.Always , ulong matchKeywords = ulong.MaxValue , bool needCountHits = false) { var r = false; if ( traceEvents != null && traceEvents.Length > 0 && onOneEventTracedOnceProcessAction != null ) { r = TraceEventsHelper .RealTimeTraceEventSession ( providerName , sessionName , tracingFileName , traceEvents , onOneEventTracedOnceProcessAction , traceEventProviderOptions , traceEventSessionOptions , traceEventSourceType , traceEventLevel , matchKeywords , needCountHits ); } return(r); }
public static bool RealTimeTraceEventSession ( string providerName , string sessionName , string tracingFileName = null , string[] traceEvents = null , Action < long , TraceEventDispatcher , TraceEventSession , TraceEvent > onOneEventTracedOnceProcessAction = null , TraceEventProviderOptions traceEventProviderOptions = null , TraceEventSessionOptions traceEventSessionOptions = TraceEventSessionOptions.Create , TraceEventSourceType traceEventSourceType = TraceEventSourceType.MergeAll , TraceEventLevel traceEventLevel = TraceEventLevel.Always , ulong matchKeywords = ulong.MaxValue , bool needCountHits = false ) { var r = false; if (!(TraceEventSession.IsElevated() ?? false)) { Out.WriteLine("To turn on ETW events you need to be Administrator, please run from an Admin process."); return r; } var needTracingFile = !string.IsNullOrEmpty(tracingFileName); if ( traceEvents != null && traceEvents.Length > 0 && onOneEventTracedOnceProcessAction != null ) { using ( var session = ( needTracingFile ? new TraceEventSession ( sessionName , tracingFileName , traceEventSessionOptions ) { StopOnDispose = true } : new TraceEventSession ( sessionName , traceEventSessionOptions ) { StopOnDispose = true } ) ) { using ( var source = ( needTracingFile ? new ETWTraceEventSource(tracingFileName) : session.Source ) ) { long sequence = 0; RegisterCallbacks ( providerName , traceEvents , source , session , (x, y, z) => { long id = 0; if (needCountHits) { id = Interlocked.Increment(ref sequence); } onOneEventTracedOnceProcessAction ( id , x , y , z ); } ); var restarted = session .EnableProvider ( providerName , traceEventLevel , matchKeywords , traceEventProviderOptions ); source .Process(); r = true; } } } return r; }
public static Task<bool> RealTimeTraceEventSessionAsync ( string providerName , string sessionName , string tracingFileName = null , string[] traceEvents = null , Action < long , TraceEventDispatcher , TraceEventSession , TraceEvent > onOneEventTracedOnceProcessAction = null , TraceEventProviderOptions traceEventProviderOptions = null , TraceEventSessionOptions traceEventSessionOptions = TraceEventSessionOptions.Create , TraceEventSourceType traceEventSourceType = TraceEventSourceType.MergeAll , TraceEventLevel traceEventLevel = TraceEventLevel.Always , ulong matchKeywords = ulong.MaxValue , bool needCountHits = false ) { return Task .Factory .StartNew<bool> ( () => { return RealTimeTraceEventSession ( providerName , sessionName , tracingFileName , traceEvents , onOneEventTracedOnceProcessAction , traceEventProviderOptions , traceEventSessionOptions , traceEventSourceType , traceEventLevel , matchKeywords , needCountHits ); } , TaskCreationOptions.LongRunning | TaskCreationOptions.DenyChildAttach ); }
public bool RealTimeTraceEventSession ( string providerName , string sessionName , string tracingFileName = null , string[] traceEvents = null , Action < long , TraceEventDispatcher , TraceEventSession , TraceEvent > onOneEventTracedOnceProcessAction = null , TraceEventProviderOptions traceEventProviderOptions = null , TraceEventSessionOptions traceEventSessionOptions = TraceEventSessionOptions.Create , TraceEventSourceType traceEventSourceType = TraceEventSourceType.MergeAll , TraceEventLevel traceEventLevel = TraceEventLevel.Always , ulong matchKeywords = ulong.MaxValue , bool needCountHits = false) { var r = false; if ( traceEvents != null && traceEvents.Length > 0 && onOneEventTracedOnceProcessAction != null ) { r = TraceEventsHelper .RealTimeTraceEventSession ( providerName , sessionName , tracingFileName , traceEvents , onOneEventTracedOnceProcessAction , traceEventProviderOptions , traceEventSessionOptions , traceEventSourceType , traceEventLevel , matchKeywords , needCountHits ); } return r; }
public static bool RealTimeTraceEventSession ( string providerName , string sessionName , string tracingFileName = null , string[] traceEvents = null , Action < long , TraceEventDispatcher , TraceEventSession , TraceEvent > onOneEventTracedOnceProcessAction = null , TraceEventProviderOptions traceEventProviderOptions = null , TraceEventSessionOptions traceEventSessionOptions = TraceEventSessionOptions.Create , TraceEventSourceType traceEventSourceType = TraceEventSourceType.MergeAll , TraceEventLevel traceEventLevel = TraceEventLevel.Always , ulong matchKeywords = ulong.MaxValue , bool needCountHits = false ) { var r = false; if (!(TraceEventSession.IsElevated() ?? false)) { Out.WriteLine("To turn on ETW events you need to be Administrator, please run from an Admin process."); return(r); } var needTracingFile = !string.IsNullOrEmpty(tracingFileName); if ( traceEvents != null && traceEvents.Length > 0 && onOneEventTracedOnceProcessAction != null ) { using ( var session = ( needTracingFile ? new TraceEventSession ( sessionName , tracingFileName , traceEventSessionOptions ) { StopOnDispose = true } : new TraceEventSession ( sessionName , traceEventSessionOptions ) { StopOnDispose = true } ) ) { using ( var source = ( needTracingFile ? new ETWTraceEventSource(tracingFileName) : session.Source ) ) { long sequence = 0; RegisterCallbacks ( providerName , traceEvents , source , session , (x, y, z) => { long id = 0; if (needCountHits) { id = Interlocked.Increment(ref sequence); } onOneEventTracedOnceProcessAction ( id , x , y , z ); } ); var restarted = session .EnableProvider ( providerName , traceEventLevel , matchKeywords , traceEventProviderOptions ); source .Process(); r = true; } } } return(r); }