GetAdaptersAddresses获取适配器信息

教材上面的知识总是慢上几拍。

用于获取适配器信息的GetAdaptersInfo函数已经不是推荐函数。

在Windows Xp及以上的操作系统中推荐使用GetAdaptersAddresses。

 

我们先来看看函数原型:

ULONG WINAPI GetAdaptersAddresses(
  __in          ULONG Family,
  __in          ULONG Flags,
  __in          PVOID Reserved,
  __in_out      PIP_ADAPTER_ADDRESSES AdapterAddresses,
  __in_out      PULONG SizePointer
);

 

参考资料:

GetAdaptersAddresses function
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365915(v=vs.85).aspx

 

在使用过程中有一点需要注意:

由于GetAdaptersAddresses函数获取数据是通过复制内存到指定堆的方式,  而适配器数量为一个不确定值,导致堆的大小不为确定值。  所以第一次运行改函数时,仅获取需要申请的堆的大小, 并返回ERROR_BUFFER_OVERFLOW值。因此,获取适配器信息该函数至少需要运行两次。 如果数据正常填充,在第二次填充数据时,由于pAdapterAddresses所指向的内存堆空间已申请, 将不再返回ERROR_BUFFER_OVERFLOW值这时跳出循环即可获取到所需数据。

 

 

参考源码:点击下载

 

你可能感兴趣的:(windows,XP,buffer,winapi)