1

为了:

DWORD GetAdaptersInfo(
  __out    PIP_ADAPTER_INFO pAdapterInfo,
  __inout  PULONG pOutBufLen
);

的描述pOutBufLen如下:

pOutBufLen

[in, out] 指向由 pAdapterInfo 参数指示的缓冲区大小(以字节为单位)的指针。如果此大小不足以容纳适配器信息,则此函数将缓冲区填充为所需大小,并返回错误代码 ERROR_BUFFER_OVERFLOW。

现在我的问题是,我们如何知道缓冲区大小(即 pOutBufLen)应该是多少?如果我们有超过 16 个 NIC,那么正确的方法是什么?

来源msdn

4

1 回答 1

2

通常的使用方式是这样的:

IP_ADAPTER_INFO *buffer= NULL;
ULONG length = 0;

// call with length of 0. It'll fail, but tell us needed size.
GetAdaptersInfo(buffer, &length);

// allocate space needed.
buffer = malloc(length);

// Call again, with necessary size.
if (buffer != NULL)
    GetAdaptersInfo(bufer, &length);

至少在理论上,您应该真正在一个while循环中执行此操作,或者按该顺序执行此操作——调用、分配、再次调用,然后继续重新分配和重新调用,直到它成功。

这将让它(最终)成功,即使用户碰巧在第一次和第二次调用之间插入了网络适配器所以即使你分配了它认为需要的空间,在你进行第二次调用之前它变得不够用了称呼。

于 2012-06-04T06:14:25.977 回答