private static List <RegistryEntry> GetRegistryEntries(string rootKey, RegistryKey hive) { RegistryKey key; List <RegistryEntry> entries = new List <RegistryEntry>(); key = hive.OpenSubKey(rootKey); if (key == null) { return(new List <RegistryEntry>()); } if (key != null && key.SubKeyCount > 1) { foreach (var k in key.GetSubKeyNames()) { string rootKeyLocation = Regex.Replace(key.Name, hive.Name + @"\\", ""); RegistryKey subkey = hive.OpenSubKey(rootKeyLocation + "\\" + k); entries.AddRange(GetRegistryEntries(rootKeyLocation + "\\" + k, hive)); } } foreach (var valueName in key.GetValueNames()) { var rawValue = key.GetValue(valueName, "", RegistryValueOptions.DoNotExpandEnvironmentNames); RegistryKeyData keyValue = null; RegistryValueKind kvk = key.GetValueKind(valueName); switch (kvk) { case RegistryValueKind.String: keyValue = new SZRegistryKey(rawValue); break; case RegistryValueKind.DWord: keyValue = new DwordRegistryKey(rawValue); break; case RegistryValueKind.ExpandString: keyValue = new EXSZRegistryKey(rawValue); break; case RegistryValueKind.MultiString: keyValue = new MultiSZRegistryKey(rawValue); break; case RegistryValueKind.QWord: object keyValue3 = key.GetValue(valueName); keyValue = new QwordRegistryKey(rawValue); break; case RegistryValueKind.Binary: byte[] binary = (byte[])rawValue; var hexstring = ConvertUtility.ByteToHexString(binary); keyValue = new BinaryRegistryKey(hexstring); break; case RegistryValueKind.Unknown: case RegistryValueKind.None: keyValue = new SZRegistryKey(string.Empty); break; default: keyValue = new SZRegistryKey(string.Empty); break; } entries.Add(new RegistryEntry() { Name = valueName, Data = keyValue, Type = key.GetValueKind(valueName), FullPath = key.Name + "\\" + valueName, Location = key.Name }); } return(entries); }
protected bool Equals(BinaryRegistryKey other) { return(string.Equals(Data, other.Data)); }