示例#1
0
        /// <summary>
        /// Wire up parsing of kernel event data from the specified ETWTraceEventSource.
        /// </summary>
        /// <param name="eventSource">The ETWTraceEventSource from which to parse the data.</param>
        private void ParseKernelTraceEvents(ETWTraceEventSource eventSource)
        {
            if (m_kernelEvents == KernelTraceEventParser.Keywords.None)
            {
                return;
            }

            var kernelParser = new KernelTraceEventParser(eventSource);

            // iterate over each set bit, wiring up a callback to parse the data
            uint eventBits = (uint)m_kernelEvents;
            int  bitPos    = 0;

            while (eventBits > 0)
            {
                // cycle through until a set bit is found
                while ((((uint)eventBits) & (uint)(1 << bitPos)) == 0)
                {
                    ++bitPos;
                    Debug.Assert(bitPos < 32);
                }

                var bitVal = (uint)(1 << bitPos);

                // now strip it from eventBits and covert it to its enum value
                eventBits ^= bitVal;
                KernelTraceEventParser.Keywords kernelEvent = (KernelTraceEventParser.Keywords)bitVal;

                if ((kernelEvent & KernelTraceEventParser.Keywords.ImageLoad) == KernelTraceEventParser.Keywords.ImageLoad)
                {
                    var modLoads = new EventDataListString <KernelPerfEvents>(KernelPerfEvents.ModuleLoad);

                    modLoads.Values = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

                    kernelParser.ImageLoad += delegate(ImageLoadTraceData data)
                    {
                        if (string.Compare(data.ProcessName, m_process, true) == 0)
                        {
                            var modName = Path.GetFileName(data.FileName);
                            if (!modLoads.Values.Contains(modName))
                            {
                                modLoads.Values.Add(modName);
                            }

                            m_processFound = true;
                        }
                    };

                    m_aed.AddData(modLoads);
                }
                else
                {
                    Console.WriteLine("WARNING: Kernel event {0} NYI for reporting.", kernelEvent);
                }
            }
        }
        /// <summary>
        /// Wire up parsing of kernel event data from the specified ETWTraceEventSource.
        /// </summary>
        /// <param name="eventSource">The ETWTraceEventSource from which to parse the data.</param>
        private void ParseKernelTraceEvents(ETWTraceEventSource eventSource)
        {
            if (m_kernelEvents == KernelTraceEventParser.Keywords.None)
                return;

            var kernelParser = new KernelTraceEventParser(eventSource);

            // iterate over each set bit, wiring up a callback to parse the data
            uint eventBits = (uint)m_kernelEvents;
            int bitPos = 0;

            while (eventBits > 0)
            {
                // cycle through until a set bit is found
                while ((((uint)eventBits) & (uint)(1 << bitPos)) == 0)
                {
                    ++bitPos;
                    Debug.Assert(bitPos < 32);
                }

                var bitVal = (uint)(1 << bitPos);

                // now strip it from eventBits and covert it to its enum value
                eventBits ^= bitVal;
                KernelTraceEventParser.Keywords kernelEvent = (KernelTraceEventParser.Keywords)bitVal;

                if ((kernelEvent & KernelTraceEventParser.Keywords.ImageLoad) == KernelTraceEventParser.Keywords.ImageLoad)
                {
                    var modLoads = new EventDataListString<KernelPerfEvents>(KernelPerfEvents.ModuleLoad);

                    modLoads.Values = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

                    kernelParser.ImageLoad += delegate(ImageLoadTraceData data)
                    {
                        if (string.Compare(data.ProcessName, m_process, true) == 0)
                        {
                            var modName = Path.GetFileName(data.FileName);
                            if (!modLoads.Values.Contains(modName))
                                modLoads.Values.Add(modName);

                            m_processFound = true;
                        }
                    };

                    m_aed.AddData(modLoads);
                }
                else
                {
                    Console.WriteLine("WARNING: Kernel event {0} NYI for reporting.", kernelEvent);
                }
            }
        }