/// <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); } } }