public EventTemplateReader(IDiagnostics diags, IEventManifestMetadata metadata = null) { this.diags = diags ?? throw new ArgumentNullException(nameof(diags)); this.metadata = metadata; var nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace("win", WinEventSchema.Namespace); nsr = nsmgr; }
private void StripReservedMetadata(EventManifest manifest, IEventManifestMetadata metadata) { foreach (var provider in manifest.Providers) { var channelIds = new HashSet <byte>(metadata.Channels.Select(x => x.Value.Value)); var levelNames = new HashSet <QName>(metadata.Levels.Select(x => x.Name.Value)); var taskNames = new HashSet <QName>(metadata.Tasks.Select(x => x.Name.Value)); var opcodeNames = new HashSet <QName>(metadata.Opcodes.Select(x => x.Name.Value)); var keywordNames = new HashSet <QName>(metadata.Keywords.Select(x => x.Name.Value)); var messageSet = new HashSet <LocalizedString>(); messageSet.UnionWith(from x in provider.Channels where x.Message != null && channelIds.Contains(x.Value.Value) select x.Message); messageSet.UnionWith(from x in provider.Levels where x.Message != null && levelNames.Contains(x.Name) select x.Message); messageSet.UnionWith(from x in provider.Tasks where x.Message != null && taskNames.Contains(x.Name) select x.Message); messageSet.UnionWith(from x in provider.Opcodes where x.Task == null && x.Message != null && opcodeNames.Contains(x.Name) select x.Message); messageSet.UnionWith(from x in provider.Keywords where x.Message != null && keywordNames.Contains(x.Name) select x.Message); foreach (var resourceSet in manifest.Resources) { resourceSet.Strings.RemoveAll(x => messageSet.Contains(x)); } provider.Channels.RemoveAll(x => channelIds.Contains(x.Value.Value)); provider.Levels.RemoveAll(x => levelNames.Contains(x.Name)); provider.Tasks.RemoveAll(x => taskNames.Contains(x.Name)); provider.Opcodes.RemoveAll(x => opcodeNames.Contains(x.Name)); provider.Keywords.RemoveAll(x => keywordNames.Contains(x.Name)); } }