Share via


GetIpInterfaceTable-Funktion (netioapi.h)

Die GetIpInterfaceTable-Funktion ruft die IP-Schnittstelleneinträge auf dem lokalen Computer ab.

Syntax

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
  [in]  ADDRESS_FAMILY         Family,
  [out] PMIB_IPINTERFACE_TABLE *Table
);

Parameter

[in] Family

Die Adressfamilie der abzurufenden IP-Schnittstellen.

Mögliche Werte für die Adressfamilie sind in der Headerdatei Winsock2.h aufgeführt. Beachten Sie, dass die Werte für die AF_ Adressfamilie und PF_ Protokollfamilienkonstanten identisch sind (z. B. AF_INET und PF_INET), sodass beide Konstanten verwendet werden können.

Unter Windows Vista und höher sowie auf dem Windows SDK wurden die organization von Headerdateien geändert, und mögliche Werte für dieses Element werden in der Ws2def.h-Headerdatei definiert. Beachten Sie, dass die Ws2def.h-Headerdatei automatisch in Winsock2.h enthalten ist und nie direkt verwendet werden sollte.

Die derzeit unterstützten Werte sind AF_INET, AF_INET6 und AF_UNSPEC.

Wert Bedeutung
AF_UNSPEC
0
Die Adressfamilie ist nicht angegeben. Wenn dieser Parameter angegeben wird, gibt die GetIpInterfaceTable-Funktion die IP-Schnittstellentabelle zurück, die sowohl IPv4- als auch IPv6-Einträge enthält.
AF_INET
2
Die IPv4-Adressfamilie (Internet Protocol Version 4).
AF_INET6
23
Die IPv6-Adressfamilie (Internet Protocol Version 6).

[out] Table

Ein Zeiger auf einen Puffer, der die Tabelle der IP-Schnittstelleneinträge in einer MIB_IPINTERFACE_TABLE-Struktur empfängt.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.

Rückgabecode Beschreibung
ERROR_INVALID_PARAMETER
Es wurde ein ungültiger Parameter an die Funktion übergeben. Dieser Fehler wird zurückgegeben, wenn ein NULL-Zeiger im Table-Parameter übergeben oder der Family-Parameter nicht als AF_INET, AF_INET6 oder AF_UNSPEC angegeben wurde.
ERROR_NOT_ENOUGH_MEMORY
Für den Vorgang stehen nicht genügend Arbeitsspeicherressourcen zur Verfügung.
ERROR_NOT_FOUND
Es wurden keine IP-Schnittstelleneinträge gefunden, wie im Family-Parameter angegeben.
ERROR_NOT_SUPPORTED
Die Funktion wird nicht unterstützt. Dieser Fehler wird zurückgegeben, wenn der im Parameter Address angegebene IP-Transport auf dem lokalen Computer nicht konfiguriert ist. Dieser Fehler wird auch bei Versionen von Windows zurückgegeben, in denen diese Funktion nicht unterstützt wird.
Andere
Verwenden Sie die FormatMessage-Funktion , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen.

Hinweise

Die GetIpInterfaceTable-Funktion ist unter Windows Vista und höher definiert.

The
Die GetIpInterfaceTable-Funktion listet die IP-Schnittstellen auf einem lokalen System auf und gibt diese Informationen in einer MIB_IPINTERFACE_TABLE-Struktur zurück.

IP-Schnittstelleneinträge werden in einer MIB_IPINTERFACE_TABLE Struktur im Puffer zurückgegeben, auf den der Table-Parameter verweist. Die MIB_IPINTERFACE_TABLE-Struktur enthält eine IP-Schnittstelleneintragsanzahl und ein Array von MIB_IPINTERFACE_ROW Strukturen für jeden IP-Schnittstelleneintrag. Wenn diese zurückgegebenen Strukturen nicht mehr erforderlich sind, geben Sie den Speicher frei, indem Sie die FreeMibTable aufrufen.

Der Family-Parameter muss entweder für AF_INET oder AF_INET6 initialisiert werden.

Beachten Sie, dass die zurückgegebene MIB_IPINTERFACE_TABLE Struktur, auf die vom Table-Parameter verwiesen wird, eine Auffüllung für die Ausrichtung zwischen dem NumEntries-Element und dem ersten MIB_IPINTERFACE_ROW Arrayeintrag im Table-Element der MIB_IPINTERFACE_TABLE-Struktur enthalten kann. Zwischen den MIB_IPINTERFACE_ROW Arrayeinträgen kann auch ein Abstand für die Ausrichtung vorhanden sein. Bei jedem Zugriff auf einen MIB_IPINTERFACE_ROW Arrayeintrag sollte davon ausgegangen werden, dass aufgefüllt werden kann.

Beispiele

Im folgenden Beispiel wird die IP-Schnittstellentabelle abgerufen und dann die Werte einiger Elemente der IP-Schnittstelleneinträge in der Tabelle ausgegeben.

#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);
}


Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile netioapi.h (include Iphlpapi.h)
Bibliothek Iphlpapi.lib
DLL Iphlpapi.dll

Weitere Informationen

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

IP-Hilfsfunktionsreferenz

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange