private static unsafe IEventTraceOperand BuildOperandFromXml(EVENT_RECORD *eventRecord, Dictionary <Guid, EventSourceManifest> cache, EventRecordReader eventRecordReader, int metadataTableIndex) { EventSourceManifest manifest; Guid providerGuid = eventRecord->ProviderId; if (!cache.TryGetValue(providerGuid, out manifest)) { manifest = CreateEventSourceManifest(providerGuid, cache, eventRecord, eventRecordReader); } if (manifest == null) { return(null); } return(!manifest.IsComplete ? null : EventTraceOperandBuilder.Build(manifest.Schema, eventRecord->Id, metadataTableIndex)); }
private static unsafe IEventTraceOperand BuildOperandFromTdh(EVENT_RECORD *eventRecord, int metadataTableIndex) { uint bufferSize; byte *buffer = (byte *)0; // Not Found if (Tdh.GetEventInformation(eventRecord, 0, IntPtr.Zero, buffer, out bufferSize) == 1168) { return(null); } buffer = (byte *)Marshal.AllocHGlobal((int)bufferSize); Tdh.GetEventInformation(eventRecord, 0, IntPtr.Zero, buffer, out bufferSize); var traceEventInfo = (TRACE_EVENT_INFO *)buffer; IEventTraceOperand traceEventOperand = EventTraceOperandBuilder.Build(traceEventInfo, metadataTableIndex); Marshal.FreeHGlobal((IntPtr)buffer); return(traceEventOperand); }
private unsafe IEventTraceOperand BuildOperand(EVENT_RECORD *eventRecord, EventRecordReader eventRecordReader, int metadataTableIndex, ref bool isSpecialKernelTraceMetaDataEvent) { if (eventRecord->ProviderId == CustomParserGuids.KernelTraceControlMetaDataGuid && eventRecord->Opcode == 32) { isSpecialKernelTraceMetaDataEvent = true; return(EventTraceOperandBuilder.Build((TRACE_EVENT_INFO *)eventRecord->UserData, metadataTableIndex)); } IEventTraceOperand operand; if ((operand = BuildOperandFromTdh(eventRecord, metadataTableIndex)) == null) { operand = BuildOperandFromXml(eventRecord, this.eventSourceManifestCache, eventRecordReader, metadataTableIndex); } if (operand == null && eventRecord->Id != 65534) // don't show manifest events { operand = BuildUnknownOperand(eventRecord, metadataTableIndex); } return(operand); }