コード例 #1
0
        private unsafe uint EtwNotificationCallback(uint requestCode, IntPtr context, IntPtr bufferSize, byte *buffer)
        {
            if (null == buffer)
            {
                return(uint.MaxValue);
            }
            if (DebugTrace.Info)
            {
                DebugTrace.Trace(TraceLevel.Info, "EtwNotificationCallback is called!");
            }
            EventTraceHeader *headerPtr = (EventTraceHeader *)buffer;

            switch (requestCode)
            {
            case 4:
            {
                this.traceHandle = headerPtr->HistoricalContext;
                uint traceEnableFlags = EtwNativeMethods.GetTraceEnableFlags(this.traceHandle);
                int  traceEnableLevel = EtwNativeMethods.GetTraceEnableLevel(this.traceHandle);
                if (DebugTrace.Info)
                {
                    DebugTrace.Trace(TraceLevel.Info, "EtwNotificationCallback: EnableEvents: Current DiagnosticTrace Level {0}", DiagnosticUtility.Level);
                    DebugTrace.Trace(TraceLevel.Info, "EtwNotificationCallback: EnableEvents: flags = {0} , level = {1}", traceEnableFlags, traceEnableLevel);
                }
                using (Process process = Process.GetCurrentProcess())
                {
                    if ((traceEnableFlags == process.Id) && (traceEnableLevel > 0))
                    {
                        DiagnosticUtility.Level = this.LevelFromInt(traceEnableLevel);
                        if (DebugTrace.Info)
                        {
                            DebugTrace.Trace(TraceLevel.Info, "EtwNotificationCallback: New DiagnosticTrace Level {0}", DiagnosticUtility.Level);
                        }
                    }
                    break;
                }
            }

            case 5:
                this.traceHandle = 0L;
                if (DebugTrace.Info)
                {
                    DebugTrace.Trace(TraceLevel.Info, "EtwNotificationCallback: Disabling Session Handle!!");
                }
                break;
            }
            return(0);
        }
コード例 #2
0
        unsafe uint EtwNotificationCallback(uint requestCode, System.IntPtr context, System.IntPtr bufferSize, byte *buffer)
        {
            if (null == buffer)
            {
                //note that the return value will be ignored
                return(uint.MaxValue);
            }

            EventTraceHeader *eventBuffer = (EventTraceHeader *)buffer;

            switch (requestCode)
            {
            case RequestCodes.EnableEvents:
                this.traceHandle = eventBuffer->HistoricalContext;
                int flags = EtwNativeMethods.GetTraceEnableFlags((ulong)this.traceHandle);
                int level = EtwNativeMethods.GetTraceEnableLevel((ulong)this.traceHandle);
                using (Process process = Process.GetCurrentProcess())
                {
                    if (flags == process.Id)
                    {
                        //TODO, vadim, if the listener is private, forward the level
                        //if not, consider using TraceFilter
                        //Level = LevelFromInt(level);
                    }
                }
                break;

            case RequestCodes.DisableEvents:
                this.traceHandle = 0;
                break;

            default:
                this.traceHandle = 0;
                break;
            }

            return(0);
        }