如何使用 Windows API 确定注册表值数据的大小?

How do I determine the size of a registry value's data using the Windows API?

本文关键字:数据 注册表 Windows 何使用 API      更新时间:2023-10-16

RegQueryValueEx()基本上要求您对保存注册表值所需的缓冲区大小进行疯狂猜测。如果你搞砸了,你会因为自己的麻烦而ERROR_MORE_DATA。显然,您可以在循环中调用该函数并每次增加缓冲区大小,直到您幸运为止,但这个"解决方案"让我感到恶心。我是否缺少正确执行此操作的方法,或者 API 真的像看起来那么糟糕?

RegQueryValueEx 文档说:

如果 lpData 为 NULL,而 lpcbData 为非 NULL,则该函数返回 ERROR_SUCCESS数据的大小(以字节为单位)存储在 由 lpcbData 指向的变量。这使应用程序能够 确定为值的数据分配缓冲区的最佳方式。

换句话说,只需指定 NULL 作为缓冲区,该函数就可以返回 lpcbData 中的数据大小。

因此,您只需调用 API 两次,一次用于获取大小,一次用于获取实际数据。顺便说一下,这种方法在Windows API中并不少见。