Exemplo n.º 1
0
        /// <summary>
        /// 转换注册表所需数据。
        /// </summary>
        /// <param name="is64BitRegistry">
        /// </param>
        /// <param name="lpType">
        /// 注册表键值类型。
        /// </param>
        /// <param name="lpData">
        /// 注册表键值。
        /// </param>
        /// <param name="lpcbData">
        /// 注册表键值所需内存。
        /// </param>
        /// <returns>
        /// 转换为已封装数据。
        /// </returns>
        protected RegKey ConvertData(bool is64BitRegistry, REG_KEY_TYPE lpType, IntPtr lpData, int lpcbData)
        {
            RegKey reg_key;

            if (lpType == REG_KEY_TYPE.REG_DWORD)
            {
                var lp_data_int = Marshal.ReadInt32(lpData);
                reg_key = new RegKey(this, lpType, lp_data_int);
            }
            else if (lpType == REG_KEY_TYPE.REG_QWORD)
            {
                var lp_data_long = Marshal.ReadInt64(lpData);
                reg_key = new RegKey(this, lpType, lp_data_long);
            }
            else if (lpType == REG_KEY_TYPE.REG_SZ ||
                     lpType == REG_KEY_TYPE.REG_EXPAND_SZ ||
                     lpType == REG_KEY_TYPE.REG_MULTI_SZ)
            {
                var lp_data_str = Marshal.PtrToStringUni(lpData);
                lp_data_str = lp_data_str?.Trim();
                reg_key     = new RegKey(this, lpType, lp_data_str);
            }
            else if (lpType == REG_KEY_TYPE.REG_BINARY)
            {
                var lp_data_bin = new byte[lpcbData];
                Marshal.Copy(lpData, lp_data_bin, 0, lpcbData);
                reg_key = new RegKey(this, lpType, lp_data_bin);
            }
            else
            {
                throw new DataException($"注册表访问失败\n注册表数据类型异常\n{nameof(ConvertData)}");
            }

            return(reg_key);
        }
Exemplo n.º 2
0
 /// <inheritdoc />
 /// <summary>
 /// 注册表键信息类构造函数。
 /// </summary>
 /// <param name="hKey">
 /// 注册表根键。
 /// </param>
 /// <param name="lpSubKey">
 /// 注册表子键。
 /// </param>
 /// <param name="lpValueName">
 /// 注册表键名。
 /// </param>
 /// <param name="lpKind">
 /// 注册表键值类型。
 /// </param>
 /// <param name="lpValue">
 /// 注册表键值。
 /// </param>
 public RegKey(
     REG_ROOT_KEY hKey,
     string lpSubKey,
     string lpValueName  = "",
     REG_KEY_TYPE lpKind = REG_KEY_TYPE.REG_UNKNOWN,
     object lpValue      = null) :
     base(hKey, lpSubKey, lpValueName)
 {
     LpKind  = lpKind;
     LpValue = lpValue;
 }
Exemplo n.º 3
0
 /// <inheritdoc />
 /// <summary>
 /// 注册表键信息类构造函数。
 /// </summary>
 /// <param name="hKey">
 /// 注册表根键。
 /// </param>
 /// <param name="lpSubKey">
 /// 注册表子键。
 /// </param>
 /// <param name="lpValueName">
 /// 注册表键名。
 /// </param>
 /// <param name="is64BitRegistry">
 ///
 /// </param>
 /// <param name="lpType">
 /// 注册表键值类型。
 /// </param>
 /// <param name="lpValue">
 /// 注册表键值。
 /// </param>
 public RegKey(
     REG_ROOT_KEY hKey,
     string lpSubKey,
     string lpValueName   = "",
     bool is64BitRegistry = false,
     REG_KEY_TYPE lpType  = REG_KEY_TYPE.REG_UNKNOWN,
     object lpValue       = null) :
     base(hKey, lpSubKey, lpValueName, is64BitRegistry)
 {
     LpType  = lpType;
     LpValue = lpValue;
 }
Exemplo n.º 4
0
        /// <summary>
        /// 转换注册表所需数据。
        /// </summary>
        /// <param name="lpKind">
        /// 注册表键值类型。
        /// </param>
        /// <param name="lpData">
        /// 注册表键值。
        /// </param>
        /// <param name="lpcbData">
        /// 注册表键值所需内存。
        /// </param>
        /// <returns>
        /// 转换为已封装数据。
        /// </returns>
        protected Task <RegKey> ConvertData(REG_KEY_TYPE lpKind, IntPtr lpData, int lpcbData)
        {
            return(Task.Run(() =>
            {
                RegKey regkey;
                if (lpKind == REG_KEY_TYPE.REG_DWORD)
                {
                    var lpdataint = Marshal.ReadInt32(lpData);
                    regkey = new RegKey(this, lpKind, lpdataint);
                }
                else if (lpKind == REG_KEY_TYPE.REG_QWORD)
                {
                    var lpdataint = Marshal.ReadInt64(lpData);
                    regkey = new RegKey(this, lpKind, lpdataint);
                }
                else if (lpKind == REG_KEY_TYPE.REG_SZ ||
                         lpKind == REG_KEY_TYPE.REG_EXPAND_SZ ||
                         lpKind == REG_KEY_TYPE.REG_MULTI_SZ)
                {
                    var lpdatastr = Marshal.PtrToStringUni(lpData);
                    lpdatastr = lpdatastr?.Trim();
                    regkey = new RegKey(this, lpKind, lpdatastr);
                }
                else if (lpKind == REG_KEY_TYPE.REG_BINARY)
                {
                    var lpdatabin = new byte[lpcbData];
                    Marshal.Copy(lpData, lpdatabin, 0, lpcbData);
                    regkey = new RegKey(this, lpKind, lpdatabin);
                }
                else
                {
                    throw new Exception(@"注册表访问失败" + '\n' + @"注册表数据类型异常" + '\n' + nameof(ConvertData));
                }

                return regkey;
            }));
        }
Exemplo n.º 5
0
 /// <inheritdoc />
 /// <summary>
 /// 注册表键信息类构造函数。
 /// </summary>
 /// <param name="regPath">
 /// 注册表键路径信息类。
 /// </param>
 /// <param name="lpKind">
 /// 注册表键值类型。
 /// </param>
 /// <param name="lpValue">
 /// 注册表键值。
 /// </param>
 public RegKey(RegPath regPath, REG_KEY_TYPE lpKind = REG_KEY_TYPE.REG_UNKNOWN, object lpValue = null) :
     base(regPath)
 {
     LpKind  = lpKind;
     LpValue = lpValue;
 }