REG_
有没有一种具体的方法来确定 C 中BINARY 值所需的确切缓冲区大小RegQueryValueEx
?如果可能,请提供代码演示方法。
问问题
634 次
1 回答
2
执行 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);
这也处理缓冲区可能在调用之间改变大小的情况,即共享缓冲区或正在更新的注册表项。
于 2012-07-29T18:25:16.140 回答