Exemplo n.º 1
0
        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));
            }
        }