private static List <DiagProcessFilterEntry> TransformKey(ProcessKey processKey)
        {
            List <DiagProcessFilterEntry> filterEntries = new List <DiagProcessFilterEntry>();

            if (processKey.ProcessId.HasValue)
            {
                filterEntries.Add(new DiagProcessFilterEntry {
                    Criteria = DiagProcessFilterCriteria.ProcessId, MatchType = DiagProcessFilterMatchType.Exact, Value = processKey.ProcessId.Value.ToString(CultureInfo.InvariantCulture)
                });
            }
            if (processKey.ProcessName != null)
            {
                filterEntries.Add(new DiagProcessFilterEntry {
                    Criteria = DiagProcessFilterCriteria.ProcessName, MatchType = DiagProcessFilterMatchType.Exact, Value = processKey.ProcessName
                });
            }
            if (processKey.RuntimeInstanceCookie.HasValue)
            {
                filterEntries.Add(new DiagProcessFilterEntry {
                    Criteria = DiagProcessFilterCriteria.RuntimeId, MatchType = DiagProcessFilterMatchType.Exact, Value = processKey.RuntimeInstanceCookie.Value.ToString("D")
                });
            }

            if (filterEntries.Count > 0)
            {
                return(filterEntries);
            }

            throw new ArgumentException($"Invalid {nameof(processKey)}");
        }
        public static DiagProcessFilter FromProcessKey(ProcessKey processKey)
        {
            var filter = new DiagProcessFilter();
            List <DiagProcessFilterEntry> filterEntries = TransformKey(processKey);

            for (int index = 0; index < filterEntries.Count; ++index)
            {
                filter.Filters.Add(filterEntries[index]);
            }

            return(filter);
        }