【问题标题】:RegEnumValue returns different buffer size in Vista compatibility modeRegEnumValue 在 Vista 兼容模式下返回不同的缓冲区大小
【发布时间】:2017-11-07 12:17:50
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: windows delphi winapi registry


    【解决方案1】:

    应该没关系。使用低级经典函数从注册表读取时,您必须能够处理带有和不带有空终止符的字符串:

    Beware of non-null-terminated registry strings

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

    RegGetValue() 等较新的函数会为您处理此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多