Функция GetIpInterfaceTable (netioapi.h)
Функция GetIpInterfaceTable извлекает записи IP-интерфейса на локальном компьютере.
Синтаксис
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPINTERFACE_TABLE *Table
);
Параметры
[in] Family
Семейство адресов извлекаемых IP-интерфейсов.
Возможные значения семейства адресов перечислены в файле заголовка Winsock2.h . Обратите внимание, что значения для семейства адресов AF_ и констант семейства протоколов PF_ идентичны (например, AF_INET и PF_INET), поэтому можно использовать любой из констант.
В Windows Vista и более поздних версиях, а также в Windows SDK организация файлов заголовков изменилась, и возможные значения для этого элемента определяются в файле заголовка Ws2def.h. Обратите внимание, что файл заголовка Ws2def.h автоматически включается в Winsock2.h и никогда не должен использоваться напрямую.
В настоящее время поддерживаются значения AF_INET, AF_INET6 и AF_UNSPEC.
[out] Table
Указатель на буфер, который получает таблицу записей ИНТЕРФЕЙСА IP в структуре MIB_IPINTERFACE_TABLE .
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение будет NO_ERROR.
Если функция завершается сбоем, возвращается один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
В функцию передан недопустимый параметр. Эта ошибка возвращается, если в параметре Table передается указатель NULL или параметр Family не указан как AF_INET, AF_INET6 или AF_UNSPEC. |
|
Для завершения операции недостаточно ресурсов памяти. |
|
Записи IP-интерфейса, указанные в параметре Family , не найдены. |
|
Функция не поддерживается. Эта ошибка возвращается, если ip-транспорт, указанный в параметре Address , не настроен на локальном компьютере. Эта ошибка также возвращается в версиях Windows, где эта функция не поддерживается. |
|
Используйте функцию FormatMessage , чтобы получить строку сообщения для возвращаемой ошибки. |
Комментарии
Функция GetIpInterfaceTable определена в Windows Vista и более поздних версиях.
The
Функция GetIpInterfaceTable перечисляет IP-интерфейсы в локальной системе и возвращает эти сведения в MIB_IPINTERFACE_TABLE структуре.
Записи ИНТЕРФЕЙСА IP возвращаются в MIB_IPINTERFACE_TABLE структуре в буфере, на который указывает параметр Table . Структура MIB_IPINTERFACE_TABLE содержит число записей IP-интерфейса и массив структур MIB_IPINTERFACE_ROW для каждой записи ИНТЕРФЕЙСА IP. Если возвращаемые структуры больше не требуются, освободите память, вызвав FreeMibTable.
Параметр Family должен быть инициализирован AF_INET или AF_INET6.
Обратите внимание, что возвращаемая структура MIB_IPINTERFACE_TABLE , на которую указывает параметр Table, может содержать заполнение для выравнивания между элементом NumEntries и первой записью массива MIB_IPINTERFACE_ROW в элементе Tableструктуры MIB_IPINTERFACE_TABLE . Между записями массива MIB_IPINTERFACE_ROW также может присутствовать заполнение для выравнивания. Любой доступ к записи массива MIB_IPINTERFACE_ROW должен предполагать, что может существовать заполнение.
Примеры
В следующем примере извлекается таблица IP-интерфейса, а затем выводится значения нескольких элементов записей IP-интерфейса в таблице.
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")
int main()
{
// Declare and initialize variables
int i;
DWORD dwRetVal = 0;
PMIB_IPINTERFACE_TABLE pipTable = NULL;
dwRetVal = GetIpInterfaceTable(AF_UNSPEC, &pipTable);
if (dwRetVal != NO_ERROR) {
printf("GetIpInterfaceTable returned error: %ld\n", dwRetVal);
exit(1);
}
// Print some variables from the rows in the table
printf("Number of table entries: %d\n\n", pipTable->NumEntries);
for (i = 0; i < (int) pipTable->NumEntries; i++) {
printf("Address Family[%d]:\t\t", i);
switch (pipTable->Table[i].Family) {
case AF_INET:
printf("IPv4\n");
break;
case AF_INET6:
printf("IPv6\n");
break;
default:
printf("Other: %d\n", pipTable->Table[i].Family);
break;
}
printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);
printf("Interface LUID IfType[%d]:\t ", i);
switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
case IF_TYPE_OTHER:
printf("Other\n");
break;
case IF_TYPE_ETHERNET_CSMACD:
printf("Ethernet\n");
break;
case IF_TYPE_ISO88025_TOKENRING:
printf("Token ring\n");
break;
case IF_TYPE_PPP:
printf("PPP\n");
break;
case IF_TYPE_SOFTWARE_LOOPBACK:
printf("Software loopback\n");
break;
case IF_TYPE_ATM:
printf("ATM\n");
break;
case IF_TYPE_IEEE80211:
printf("802.11 wireless\n");
break;
case IF_TYPE_TUNNEL:
printf("Tunnel encapsulation\n");
break;
case IF_TYPE_IEEE1394:
printf("IEEE 1394 (Firewire)\n");
break;
default:
printf("Unknown: %d\n",
pipTable->Table[i].InterfaceLuid.Info.IfType);
break;
}
printf("Interface Index[%d]:\t\t %lu\n",
i, pipTable->Table[i].InterfaceIndex);
printf("Maximum reassembly size[%d]:\t %lu\n", i,
pipTable->Table[i].MaxReassemblySize);
printf("Advertising enabled[%d]:\t\t ", i);
if (pipTable->Table[i].AdvertisingEnabled)
printf("Yes\n");
else
printf("No\n");
printf("Forwarding enabled[%d]:\t\t ", i);
if (pipTable->Table[i].ForwardingEnabled)
printf("Yes\n");
else
printf("No\n");
printf("Network layer MTU[%d]:\t\t %lu\n", i, pipTable->Table[i].NlMtu);
printf("Connected[%d]:\t\t\t ", i);
if (pipTable->Table[i].Connected)
printf("Yes\n");
else
printf("No\n");
printf("Supports wakeup patterns[%d]:\t ", i);
if (pipTable->Table[i].SupportsWakeUpPatterns)
printf("Yes\n");
else
printf("No\n");
printf("Supports neighbor discovery[%d]:\t ", i);
if (pipTable->Table[i].SupportsNeighborDiscovery)
printf("Yes\n");
else
printf("No\n");
printf("Supports router discovery[%d]:\t ", i);
if (pipTable->Table[i].SupportsRouterDiscovery)
printf("Yes\n");
else
printf("No\n");
printf("\n");
}
FreeMibTable(pipTable);
pipTable = NULL;
exit(0);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | netioapi.h (включая Iphlpapi.h) |
Библиотека | Iphlpapi.lib |
DLL | Iphlpapi.dll |