是否有具体的方法来确定 C 中 RegQueryValueEx
的 REG_
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/