教材上面的知识总是慢上几拍。
用于获取适配器信息的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值这时跳出循环即可获取到所需数据。
参考源码:点击下载