1

REG_有没有一种具体的方法来确定 C 中BINARY 值所需的确切缓冲区大小RegQueryValueEx?如果可能,请提供代码演示方法。

4

1 回答 1

2

执行 winAPI 双重调用舞蹈,它适用于除Reg函数之外的许多 win API:调用RegQueryValueEx一次,将 NULL 作为 传递lpData,以及指向lpcpDataargs 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 回答