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

时间:2017-11-07 12:17:50

标签: windows delphi winapi registry

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

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

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

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

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

是否有针对此的解决方法/补丁,不需要更改我的字符串转换代码?

1 个答案:

答案 0 :(得分:7)

没关系。使用低级经典函数从Registry中读取时,您必须能够处理带有和不带null终止符的字符串:

Beware of non-null-terminated registry strings

执行此操作的简单方法是秘密分配一个额外的字符,在阅读时不会告诉API,然后将'\0'字符附加到它返回的许多字符的末尾。

RegGetValue()等新功能为您处理此问题。