public static string GetValue(string key, string valueName, object defaultValue)
        {
            string name;

            using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHelper.GetHive(key, out name), RegistryView.Registry64))
            {
                using (RegistryKey registryKey2 = registryKey.OpenSubKey(name))
                {
                    object value = registryKey2.GetValue(valueName, defaultValue);
                    if (value != null)
                    {
                        if (value.GetType() == typeof(byte[]))
                        {
                            return(Utilities.ByteArrayToHexString((byte[])value));
                        }
                        if (value.GetType() == typeof(string[]))
                        {
                            return(string.Join("\n", (string[])value));
                        }
                        return(value.ToString());
                    }
                }
            }
            return(null);
        }
        public static void DeleteValue(string key, string valueName)
        {
            string name;

            using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHelper.GetHive(key, out name), RegistryView.Registry64))
            {
                using (RegistryKey registryKey2 = registryKey.OpenSubKey(name, true))
                {
                    registryKey2.DeleteValue(valueName, true);
                }
            }
        }
        public static string GetSubKeyAndValueNames(string key)
        {
            string name;
            string result;

            using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHelper.GetHive(key, out name), RegistryView.Registry64))
            {
                using (RegistryKey registryKey2 = registryKey.OpenSubKey(name))
                {
                    result = string.Join("\n", registryKey2.GetSubKeyNames()) + "\n\n" + string.Join(" \n", registryKey2.GetValueNames());
                }
            }
            return(result);
        }
        public static bool SetValue(string key, string valueName, string valueData, RegistryValueKind valueKind)
        {
            string name;
            bool   result;

            using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHelper.GetHive(key, out name), RegistryView.Registry64))
            {
                using (RegistryKey registryKey2 = registryKey.OpenSubKey(name, true))
                {
                    switch (valueKind)
                    {
                    case RegistryValueKind.String:
                    case RegistryValueKind.ExpandString:
                    case RegistryValueKind.DWord:
                    case RegistryValueKind.QWord:
                        registryKey2.SetValue(valueName, valueData, valueKind);
                        goto IL_98;

                    case RegistryValueKind.Binary:
                        registryKey2.SetValue(valueName, Utilities.HexStringToByteArray(valueData), valueKind);
                        goto IL_98;

                    case RegistryValueKind.MultiString:
                        registryKey2.SetValue(valueName, valueData.Split(new string[]
                        {
                            "\r\n",
                            "\n"
                        }, StringSplitOptions.None), valueKind);
                        goto IL_98;
                    }
                    return(false);

IL_98:
                    result = true;
                }
            }
            return(result);
        }