RegEnumValue在Vista兼容模式下返回不同的缓冲区大小

当我的应用程序在“Windows Vista兼容性模式”下运行(右键单击EXE,启用兼容模式并selectWindows Vista时),我有一个非常奇怪的问题。

问题是来自“RegEnumValue”函数的返回缓冲区长度值返回不同的值。

例如,registry值为“Zoom Player MAX”(15个字符):

在兼容模式下,RegEnumValue的“lpcbData”字段返回值16(包括结尾空终止符)。

启用兼容模式后,RegEnumValue的“lpcbData”字段将返回值15(不包括结尾空终止符)。

有没有解决方法/修补程序,这不需要更改我的string转换代码?

这应该不重要。 使用低级别的经典函数从注册表中读取时,必须能够处理带和不带空终止符的字符串:

注意非空终止的注册表字符串

这样做的简单方法是在读取时秘密分配一个不告诉API的额外字符,然后将'\0'字符附加到返回的许多字符的末尾。

RegGetValue()更新的功能为您处理。