Beispiel #1
0
 public override int GetHashCode()
 {
     return(ParentKeyName.GetHashCode()
            & Name.GetHashCode()
            & Value.GetHashCode()
            & Type.GetHashCode());
 }
Beispiel #2
0
        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())
                   );
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
            }
        }