/// <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); }
/// <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; }
/// <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; }
/// <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; })); }
/// <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; }