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

时间:2012-06-20 05:00:35

标签: c++ windows winapi registry

我已经编写了代码来读取和写入注册表,除了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);

2 个答案:

答案 0 :(得分:2)

来自RegSetValueExW上的MSDN手册页:

  

使用REG_MULTI_SZ数据类型时,字符串必须以两个 null 字符终止。

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

答案 1 :(得分:0)

您应该使用(value.length() + 1)*2代替value.length()*2 + 1