public override int GetHashCode() { return(ParentKeyName.GetHashCode() & Name.GetHashCode() & Value.GetHashCode() & Type.GetHashCode()); }
bool IEquatable <GenericRegistryValue> .Equals(GenericRegistryValue other) { if (other == null) { return(false); } return(ParentKeyName.is_equal_to(other.ParentKeyName) && Name.is_equal_to(other.Name) && Value.is_equal_to(other.Value) && Type.to_string().is_equal_to(other.Type.to_string()) ); }
public static string[] Enum64BitRegistryKey(ParentKeyName parentKeyName, string subKeyName) { uint numSubKeys = 0, numValues; UIntPtr hKey = TransferKeyName(parentKeyName.ToString()); uint s = 0; IntPtr pHKey = IntPtr.Zero; int KEY_QUERY_VALUE = (0x0001); int KEY_WOW64_64KEY = (0x0100); int KEY_ENUMERATE_SUB_KEYS = (0x0008); int KEY_ALL_WOW64 = (KEY_QUERY_VALUE | KEY_WOW64_64KEY | KEY_ENUMERATE_SUB_KEYS); // Create an array to hold the names. string[] names = new string[0];; IntPtr oldWOW64State = new IntPtr(); //关闭文件系统转向 if (Wow64DisableWow64FsRedirection(ref oldWOW64State)) { RegOpenKeyEx(hKey, subKeyName, 0, KEY_ALL_WOW64, out pHKey); //关闭注册表转向(禁止特定项的注册表反射) RegDisableReflectionKey(pHKey); RegQueryInfoKey(pHKey, null, s, IntPtr.Zero, out numSubKeys, IntPtr.Zero, IntPtr.Zero, out numValues, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); names = new string[numSubKeys]; uint index = 0; long writeTime; while (index < numSubKeys) { uint MAX_REG_KEY_SIZE = 2048; StringBuilder sb = new StringBuilder(); int ret = RegEnumKeyEx(pHKey, index, sb, ref MAX_REG_KEY_SIZE, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, out writeTime); if (ret != 0) { break; } Console.WriteLine(sb.ToString()); names[(int)(index++)] = sb.ToString(); } //开启注册表转向 RegEnableReflectionKey(pHKey); } //打开文件系统转向 Wow64RevertWow64FsRedirection(oldWOW64State); return(names); }
public static string Get64BitRegistryKey(ParentKeyName parentKeyName, string subKeyName, string keyName) { int KEY_QUERY_VALUE = (0x0001); int KEY_WOW64_64KEY = (0x0100); int KEY_ALL_WOW64 = (KEY_QUERY_VALUE | KEY_WOW64_64KEY); try { //将Windows注册表主键名转化成为不带正负号的整形句柄(与平台是32或者64位有关) UIntPtr hKey = TransferKeyName(parentKeyName.ToString()); //声明将要获取Key值的句柄 IntPtr pHKey = IntPtr.Zero; //记录读取到的Key值 StringBuilder result = new StringBuilder("".PadLeft(1024)); uint resultSize = 1024; uint lpType = 0; //关闭文件系统转向 IntPtr oldWOW64State = new IntPtr(); if (Wow64DisableWow64FsRedirection(ref oldWOW64State)) { //获得操作Key值的句柄 RegOpenKeyEx(hKey, subKeyName, 0, KEY_ALL_WOW64, out pHKey); //关闭注册表转向(禁止特定项的注册表反射) RegDisableReflectionKey(pHKey); //获取访问的Key值 RegQueryValueEx(pHKey, keyName, 0, out lpType, result, ref resultSize); //打开注册表转向(开启特定项的注册表反射) RegEnableReflectionKey(pHKey); } //打开文件系统转向 Wow64RevertWow64FsRedirection(oldWOW64State); //返回Key值 return(result.ToString().Trim()); } catch { return(null); } }