Пример #1
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);
        }