Funzione GetIpInterfaceTable (netioapi.h)
La funzione GetIpInterfaceTable recupera le voci dell'interfaccia IP nel computer locale.
Sintassi
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPINTERFACE_TABLE *Table
);
Parametri
[in] Family
Famiglia di indirizzi di interfacce IP da recuperare.
I valori possibili per la famiglia di indirizzi sono elencati nel file di intestazione Winsock2.h . Si noti che i valori per la famiglia di indirizzi AF_ e le costanti della famiglia di protocolli di PF_ sono identiche (ad esempio, AF_INET e PF_INET), in modo che sia possibile usare una costante.
In Windows Vista e versioni successive, nonché nella Windows SDK, l'organizzazione dei file di intestazione è stata modificata e i valori possibili per questo membro vengono definiti nel file di intestazione Ws2def.h. Si noti che il file di intestazione Ws2def.h viene incluso automaticamente in Winsock2.h e non deve mai essere usato direttamente.
I valori attualmente supportati sono AF_INET, AF_INET6 e AF_UNSPEC.
[out] Table
Puntatore a un buffer che riceve la tabella delle voci dell'interfaccia IP in una struttura MIB_IPINTERFACE_TABLE .
Valore restituito
Se la funzione ha esito positivo, il valore restituito è NO_ERROR.
Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore seguenti.
Codice restituito | Descrizione |
---|---|
|
Un parametro non valido è stato passato alla funzione. Questo errore viene restituito se un puntatore NULL viene passato nel parametro Table o il parametro Family non è stato specificato come AF_INET, AF_INET6 o AF_UNSPEC. |
|
Le risorse di memoria insufficienti sono disponibili per completare l'operazione. |
|
Non sono state trovate voci dell'interfaccia IP come specificato nel parametro Family . |
|
La funzione non è supportata. Questo errore viene restituito quando il trasporto IP specificato nel parametro Address non è configurato nel computer locale. Questo errore viene restituito anche nelle versioni di Windows in cui questa funzione non è supportata. |
|
Utilizzare la funzione FormatMessage per ottenere la stringa di messaggio per l'errore restituito. |
Commenti
La funzione GetIpInterfaceTable è definita in Windows Vista e versioni successive.
The
La funzione GetIpInterfaceTable enumera le interfacce IP in un sistema locale e restituisce queste informazioni in una struttura MIB_IPINTERFACE_TABLE .
Le voci dell'interfaccia IP vengono restituite in una struttura MIB_IPINTERFACE_TABLE nel buffer a cui punta il parametro Table . La struttura MIB_IPINTERFACE_TABLE contiene un conteggio delle voci dell'interfaccia IP e una matrice di strutture MIB_IPINTERFACE_ROW per ogni voce dell'interfaccia IP. Quando queste strutture restituite non sono più necessarie, liberare la memoria chiamando FreeMibTable.
Il parametro Family deve essere inizializzato in AF_INET o AF_INET6.
Si noti che la struttura MIB_IPINTERFACE_TABLE restituita puntata dal parametro Table può contenere spaziatura interna per l'allineamento tra il membro NumEntries e la prima voce di matrice MIB_IPINTERFACE_ROW nel membro Table della struttura MIB_IPINTERFACE_TABLE. La spaziatura interna per l'allineamento può essere presente anche tra le voci della matrice MIB_IPINTERFACE_ROW . Qualsiasi accesso a una voce di matrice MIB_IPINTERFACE_ROW deve presupporre che la spaziatura interna possa esistere.
Esempio
Nell'esempio seguente viene recuperata la tabella dell'interfaccia IP, quindi vengono stampati i valori di alcuni membri delle voci dell'interfaccia IP nella tabella.
#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);
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Windows Server 2008 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | netioapi.h (includere Iphlpapi.h) |
Libreria | Iphlpapi.lib |
DLL | Iphlpapi.dll |