public ProviderDefinitionDescription(IXPathNavigable inputProvider, StringTable strings) { if (strings == null) { throw new ArgumentNullException("strings"); } if (inputProvider == null) { throw new ArgumentNullException("inputProvider"); } XmlElement provider = inputProvider as XmlElement; if (provider == null) { throw new ArgumentException(StringResources.ETLReaderError_InvalidXmlElement_InputProvider); } this.guid = new Guid(provider.GetAttribute("guid")); bool wellKnownProviderId = WellKnownProviderList.IsWellKnownProvider(this.guid); bool dynamicManifest = WellKnownProviderList.IsDynamicProvider(this.guid); this.name = provider.GetAttribute("name"); this.events = new Dictionary <int, EventDefinitionDescription>(); XmlElement mapElements = provider["maps"]; this.valueMaps = new ValueMaps(mapElements, strings); XmlElement eventElements = provider["events"]; XmlElement templates = provider["templates"]; string eventSourceName = dynamicManifest ? this.name : null; foreach (XmlElement evt in eventElements.GetElementsByTagName("event")) { string tid = evt.GetAttribute("template"); XmlElement template = null; foreach (XmlElement t in templates.GetElementsByTagName("template")) { if (tid == t.GetAttribute("tid")) { template = t; break; } } var eventDef = new EventDefinitionDescription(evt, template, strings, wellKnownProviderId, eventSourceName); // We are not using Version information as key here. This is intentional while we make some structural changes // to handle scenarios where a single file can have events with multiple versions. Till these changes can materialize, // we have to handle scenario where we have same events with multiple versions in the same .etl file. this.events.Add(eventDef.Id, eventDef); } }
/// <summary> /// Processes an EventSource event embedded in eventstream. /// </summary> /// <param name="eventRecord"></param> /// <returns>true if its an eventsource event</returns> private bool ProcessEventSourceEvent(EventRecord eventRecord) { if (WellKnownProviderList.IsDynamicProvider(eventRecord.EventHeader.ProviderId)) { if (EventSourceHelper.CheckForDynamicManifest(eventRecord.EventHeader.EventDescriptor)) { ApplicationDataReader reader = new ApplicationDataReader(eventRecord.UserData, eventRecord.UserDataLength); byte[] rawData = reader.ReadBytes(eventRecord.UserDataLength); byte[] completeManifest = partialManifest.AddChunk(rawData); if (completeManifest != null) { this.LoadManifest(completeManifest); } return(true); } } return(false); }