如何使用 Windows API 确定注册表值数据的大小?
How do I determine the size of a registry value's data using the Windows API?
RegQueryValueEx()
基本上要求您对保存注册表值所需的缓冲区大小进行疯狂猜测。如果你搞砸了,你会因为自己的麻烦而ERROR_MORE_DATA
。显然,您可以在循环中调用该函数并每次增加缓冲区大小,直到您幸运为止,但这个"解决方案"让我感到恶心。我是否缺少正确执行此操作的方法,或者 API 真的像看起来那么糟糕?
RegQueryValueEx 文档说:
如果 lpData 为 NULL,而 lpcbData 为非 NULL,则该函数返回 ERROR_SUCCESS数据的大小(以字节为单位)存储在 由 lpcbData 指向的变量。这使应用程序能够 确定为值的数据分配缓冲区的最佳方式。
换句话说,只需指定 NULL 作为缓冲区,该函数就可以返回 lpcbData 中的数据大小。
因此,您只需调用 API 两次,一次用于获取大小,一次用于获取实际数据。顺便说一下,这种方法在Windows API中并不少见。
相关文章:
- 有没有任务栏API可以立即应用注册表更改
- 检查注册表项是否链接到(或副本)另一个注册表项
- 禁用地址共享注册表不起作用
- 如何从注册表项中提取配置单元和注册表名称
- 注册表正在设置 1 个字符
- 清理"QSettings"注册表项的最佳方法(Windows上的Qt 5)
- 在 c++ 中编辑注册表项
- 某些进程的注册表限制
- 在编译时生成某种子类/类型注册表?
- 如何测试注册表项是否存在?
- 注册表-获取值(而不是键)上次更改的时间和键创建日期
- 从注册表中检索已注销用户的 sid
- 如何正确检查 c++ 是否存在注册表项?
- 如何在不使用任何数据库的情况下制作动态注册表单?
- SQLite C/C++ 接口:将数据插入表时内存增加
- 访问注册表数据以设置链接器和包含路径
- 在注册表项中创建新数据
- Lua注册表与轻用户数据和引用之间的区别是什么?
- 从注册表接收到的宽数据被截断
- 如何使用 Windows API 确定注册表值数据的大小?