Condividi tramite


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.

Valore Significato
AF_UNSPEC
0
La famiglia di indirizzi non è specificata. Quando questo parametro viene specificato, la funzione GetIpInterfaceTable restituisce la tabella dell'interfaccia IP contenente sia le voci IPv4 che IPv6.
AF_INET
2
Famiglia di indirizzi Internet Protocol versione 4 (IPv4).
AF_INET6
23
Famiglia di indirizzi IPv6 (Internet Protocol 6).

[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
ERROR_INVALID_PARAMETER
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.
ERROR_NOT_ENOUGH_MEMORY
Le risorse di memoria insufficienti sono disponibili per completare l'operazione.
ERROR_NOT_FOUND
Non sono state trovate voci dell'interfaccia IP come specificato nel parametro Family .
ERROR_NOT_SUPPORTED
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.
Altri
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

Vedi anche

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

Informazioni di riferimento sulla funzione helper IP

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange