Win2003 服务器中多字符串注册表字段中的垃圾字符

junk character in multi string registry field in win2003 server

本文关键字:字段 字符 注册表 服务器 字符串 Win2003      更新时间:2023-10-16

我已经编写了代码来读取和写入注册表,该注册表在除win2003之外的所有操作系统中都可以正常工作。基本上在注册表(RegSetValueExW)中设置值后,我能够正确读取它(RegQueryValueExW)。但是当我打开注册表编辑器时,我看到其中有一些垃圾字符。

打开方式

RegOpenKeyExW(HKEY_LOCAL_MACHINE, subKey , 0, KEY_WRITE | KEY_WOW64_64KEY, &_regKey);

要设置:(值为 wstring)

::RegSetValueExW(_regKey, key, NULL, REG_MULTI_SZ, reinterpret_cast<const BYTE*>(value.c_str()), static_cast<DWORD>(value.length()*2 + 1));

对于查询:

::RegQueryValueExW(regKey, key, NULL, &type, reinterpret_cast<LPBYTE>(&value[0]), &valueLength);

从 MSDN 手册页 RegSetValueExW

对于 REG_MULTI_SZ 数据类型,字符串必须以两个字符结尾。

您需要构造一个包含两个终止符字符的 BYTE 数组并将其传递给函数。

你应该使用(value.length() + 1)*2而不是value.length()*2 + 1