c - 确定 C 中 RegQueryValueEx 所需的缓冲区大小

标签 c windows registry

是否有具体的方法来确定 C 中 RegQueryValueExREG_BINARY 值所需的确切缓冲区大小?如果可能,请提供代码演示方法。

最佳答案

执行 winAPI 双重调用舞蹈,它适用于除 Reg 函数之外的众多 win API:调用 RegQueryValueEx一次,将 NULL 作为 lpData 传递,并传递指向 lpcpData 的指针,args 5 和 6。该函数将返回 ERROR_SUCCESS 并填充 lpcpData 具有所需的缓冲区大小。使用该大小的缓冲区再次调用。

您也可以从传递缓冲区开始,如果它太小,函数将返回 ERROR_MORE_DATA 并用所需的缓冲区大小填充 lpcpData

考虑以下使用第二种方法的 winapi 循环的通用伪代码:

// alloc space for buffer, i.e. buffer is non-NULL

do
{
    winret = SomeWinApi(...args..., buffer, &bufferSize, ...more args...);
    if (winret != ERROR_SUCCESS)
    {
        if (winret == ERROR_MORE_DATA)
            // alloc more space
        else
        {
            // more error handling
            break;
        }
    }
    else bufferIncomplete = FALSE;

} while (bufferIncomplete);

这也处理缓冲区可能在调用之间更改大小的情况,即共享缓冲区或正在更新的注册表项。

关于c - 确定 C 中 RegQueryValueEx 所需的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711789/

相关文章:

c - 使用 read() 系统调用反转文件中的每一行

c - 如何在 Linux 上创建 10MB 的二进制文件?

c++ - 虚拟文件夹在 Windows 7 的 CFileDialog 中不可见

Windows 帮助文件 - 有哪些选项?

c# - Windows 服务 DbResource Provider

windows - 通过批处理文件设置默认 JRE 版本

.net - 已安装 VSTO x64 运行时但找不到

c - 字符串文字的 strcat 与 strncat

c - 计算机中的整数表示 - C

windows - 如何解析批处理文件中的命令输出