Registry
using System;
namespace Microsoft.Win32
{
public static class Registry
{
public static readonly RegistryKey CurrentUser = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default);
public static readonly RegistryKey LocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default);
public static readonly RegistryKey ClassesRoot = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Default);
public static readonly RegistryKey Users = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Default);
public static readonly RegistryKey PerformanceData = RegistryKey.OpenBaseKey(RegistryHive.PerformanceData, RegistryView.Default);
public static readonly RegistryKey CurrentConfig = RegistryKey.OpenBaseKey(RegistryHive.CurrentConfig, RegistryView.Default);
public static object GetValue(string keyName, string valueName, object defaultValue)
{
string subKeyName;
RegistryKey baseKeyFromKeyName = GetBaseKeyFromKeyName(keyName, out subKeyName);
using (RegistryKey registryKey = baseKeyFromKeyName.OpenSubKey(subKeyName))
return registryKey?.GetValue(valueName, defaultValue);
}
public static void SetValue(string keyName, string valueName, object value)
{
SetValue(keyName, valueName, value, RegistryValueKind.Unknown);
}
public static void SetValue(string keyName, string valueName, object value, RegistryValueKind valueKind)
{
string subKeyName;
RegistryKey baseKeyFromKeyName = GetBaseKeyFromKeyName(keyName, out subKeyName);
using (RegistryKey registryKey = baseKeyFromKeyName.CreateSubKey(subKeyName))
registryKey.SetValue(valueName, value, valueKind);
}
private static RegistryKey GetBaseKeyFromKeyName(string keyName, out string subKeyName)
{
if (keyName == null)
throw new ArgumentNullException("keyName");
int num = keyName.IndexOf('\\');
string text = (num != -1) ? keyName.Substring(0, num).ToUpperInvariant() : keyName.ToUpperInvariant();
RegistryKey result;
switch (text) {
case "HKEY_CURRENT_USER":
result = CurrentUser;
break;
case "HKEY_LOCAL_MACHINE":
result = LocalMachine;
break;
case "HKEY_CLASSES_ROOT":
result = ClassesRoot;
break;
case "HKEY_USERS":
result = Users;
break;
case "HKEY_PERFORMANCE_DATA":
result = PerformanceData;
break;
case "HKEY_CURRENT_CONFIG":
result = CurrentConfig;
break;
default:
throw new ArgumentException(System.SR.Format(System.SR.Arg_RegInvalidKeyName, "keyName"), "keyName");
}
subKeyName = ((num == -1 || num == keyName.Length) ? string.Empty : keyName.Substring(num + 1, keyName.Length - num - 1));
return result;
}
}
}