// Token: 0x06000543 RID: 1347 RVA: 0x00013D3C File Offset: 0x00011F3C
        private XElement GetXElementSnapshotInternal(string keyName)
        {
            bool   flag  = false;
            bool   flag2 = true;
            string keyName2;
            string value;

            if (!string.IsNullOrEmpty(keyName))
            {
                keyName2 = Utils.CombinePathNullSafe(this.rootKeyName, keyName);
                value    = keyName.Substring(keyName.LastIndexOf('\\') + 1);
            }
            else
            {
                keyName2 = this.rootKeyName;
                value    = "\\";
                flag     = true;
                if (this.filterRootKeys.Length > 1)
                {
                    flag2 = false;
                }
            }
            XElement xelement  = new XElement("Key", new XAttribute("Name", value));
            XElement xelement2 = xelement;

            if (this.IsProduceDxStoreFormat && flag)
            {
                xelement.Add(new XElement("Key", new XAttribute("Name", "Private")));
                XElement xelement3 = new XElement("Key", new XAttribute("Name", "Public"));
                xelement.Add(xelement3);
                xelement2 = xelement3;
            }
            IDistributedStoreKey distributedStoreKey = flag ? this.baseKey : this.baseKey.OpenKey(keyName2, DxStoreKeyAccessMode.Read, false, null);

            try
            {
                if (flag2 || this.isForceIncludeRootProperties)
                {
                    foreach (string propertyName in distributedStoreKey.GetValueNames(null))
                    {
                        bool flag3;
                        RegistryValueKind kind;
                        object            value2 = distributedStoreKey.GetValue(propertyName, out flag3, out kind, null);
                        if (value2 != null && flag3)
                        {
                            PropertyValue propertyValue = new PropertyValue(value2, kind);
                            xelement2.Add(propertyValue.ToXElement(propertyName));
                        }
                    }
                }
                IEnumerable <string> subkeyNames = distributedStoreKey.GetSubkeyNames(null);
                if (subkeyNames != null)
                {
                    foreach (string path in subkeyNames)
                    {
                        string keyName3 = Utils.CombinePathNullSafe(keyName ?? string.Empty, path);
                        if (!flag || this.IsIncludeKey(keyName3))
                        {
                            XElement xelementSnapshotInternal = this.GetXElementSnapshotInternal(keyName3);
                            xelement2.Add(xelementSnapshotInternal);
                        }
                    }
                }
            }
            finally
            {
                if (distributedStoreKey != null && !flag)
                {
                    distributedStoreKey.Dispose();
                }
            }
            return(xelement);
        }