GetIfTable-Funktion (iphlpapi.h)

Die GetIfTable-Funktion ruft die MIB-II-Schnittstellentabelle ab.

Syntax

IPHLPAPI_DLL_LINKAGE DWORD GetIfTable(
  [out]     PMIB_IFTABLE pIfTable,
  [in, out] PULONG       pdwSize,
  [in]      BOOL         bOrder
);

Parameter

[out] pIfTable

Ein Zeiger auf einen Puffer, der die Schnittstellentabelle als MIB_IFTABLE Struktur empfängt.

[in, out] pdwSize

Gibt bei der Eingabe die Größe des Puffers in Bytes an, auf den der pIfTable-Parameter verweist.

Wenn der Puffer bei der Ausgabe nicht groß genug ist, um die zurückgegebene Schnittstellentabelle aufzunehmen, legt die Funktion diesen Parameter auf die erforderliche Puffergröße in Bytes fest.

[in] bOrder

Ein boolescher Wert, der angibt, ob die zurückgegebene Schnittstellentabelle in aufsteigender Reihenfolge nach Schnittstellenindex sortiert werden soll. Wenn dieser Parameter TRUE ist, wird die Tabelle sortiert.

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_INSUFFICIENT_BUFFER
Der Puffer, auf den der pIfTable-Parameter verweist, ist nicht groß genug. Die erforderliche Größe wird in der DWORD-Variablen zurückgegeben, auf die der pdwSize-Parameter verweist.
ERROR_INVALID_PARAMETER
Der pdwSize-Parameter ist NULL, oder GetIfTable kann nicht in den Arbeitsspeicher schreiben, auf den der pdwSize-Parameter verweist.
ERROR_NOT_SUPPORTED
Diese Funktion wird auf dem Betriebssystem, das auf dem lokalen System verwendet wird, nicht unterstützt.
Andere
Verwenden Sie die FormatMessage-Funktion , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen.

Hinweise

The
Die GetIfTable-Funktion listet physische Schnittstellen auf einem lokalen System auf und gibt diese Informationen in einer MIB_IFTABLE-Struktur zurück. Zu den physischen Schnittstellen gehört die Software-Loopbackschnittstelle.

Die unter Windows Vista und höher verfügbaren Funktionen GetIfTable2 und GetIfTable2Ex sind eine erweiterte Version der GetIfTable-Funktion , die sowohl die physischen als auch die logischen Schnittstellen auf einem lokalen System aufzählt. Logische Schnittstellen umfassen verschiedene WAN-Miniport-Schnittstellen, die für L2TP, PPTP, PPOE und andere Tunnelkapselungen verwendet werden.

Schnittstellen werden in einer MIB_IFTABLE Struktur im Puffer zurückgegeben, auf den der pIfTable-Parameter verweist. Die MIB_IFTABLE-Struktur enthält eine Schnittstellenanzahl und ein Array von MIB_IFROW Strukturen für jede Schnittstelle.

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

Beispiele

Im folgenden Beispiel wird die Schnittstellentabelle abgerufen und die Anzahl der Einträge in der Tabelle sowie einige Daten für jeden Eintrag ausgegeben.

#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "IPHLPAPI.lib")

#include <iphlpapi.h>

#include <stdio.h>
#include <stdlib.h>

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

/* Note: could also use malloc() and free() */

int main()
{

    // Declare and initialize variables.

    DWORD dwSize = 0;
    DWORD dwRetVal = 0;

    unsigned int i, j;

    /* variables used for GetIfTable and GetIfEntry */
    MIB_IFTABLE *pIfTable;
    MIB_IFROW *pIfRow;

    // Allocate memory for our pointers.
    pIfTable = (MIB_IFTABLE *) MALLOC(sizeof (MIB_IFTABLE));
    if (pIfTable == NULL) {
        printf("Error allocating memory needed to call GetIfTable\n");
        return 1;
    }
    // Make an initial call to GetIfTable to get the
    // necessary size into dwSize
    dwSize = sizeof (MIB_IFTABLE);
    if (GetIfTable(pIfTable, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER) {
        FREE(pIfTable);
        pIfTable = (MIB_IFTABLE *) MALLOC(dwSize);
        if (pIfTable == NULL) {
            printf("Error allocating memory needed to call GetIfTable\n");
            return 1;
        }
    }
    // Make a second call to GetIfTable to get the actual
    // data we want.
    if ((dwRetVal = GetIfTable(pIfTable, &dwSize, FALSE)) == NO_ERROR) {
        printf("\tNum Entries: %ld\n\n", pIfTable->dwNumEntries);
        for (i = 0; i < pIfTable->dwNumEntries; i++) {
            pIfRow = (MIB_IFROW *) & pIfTable->table[i];
            printf("\tIndex[%d]:\t %ld\n", i, pIfRow->dwIndex);
            printf("\tInterfaceName[%d]:\t %ws", i, pIfRow->wszName);
            printf("\n");
            printf("\tDescription[%d]:\t ", i);
            for (j = 0; j < pIfRow->dwDescrLen; j++)
                printf("%c", pIfRow->bDescr[j]);
            printf("\n");
            printf("\tType[%d]:\t ", i);
            switch (pIfRow->dwType) {
            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 Lookback\n");
                break;
            case IF_TYPE_ATM:
                printf("ATM\n");
                break;
            case IF_TYPE_IEEE80211:
                printf("IEEE 802.11 Wireless\n");
                break;
            case IF_TYPE_TUNNEL:
                printf("Tunnel type encapsulation\n");
                break;
            case IF_TYPE_IEEE1394:
                printf("IEEE 1394 Firewire\n");
                break;
            default:
                printf("Unknown type %ld\n", pIfRow->dwType);
                break;
            }
            printf("\tMtu[%d]:\t\t %ld\n", i, pIfRow->dwMtu);
            printf("\tSpeed[%d]:\t %ld\n", i, pIfRow->dwSpeed);
            printf("\tPhysical Addr:\t ");
            if (pIfRow->dwPhysAddrLen == 0)
                printf("\n");
            for (j = 0; j < pIfRow->dwPhysAddrLen; j++) {
                if (j == (pIfRow->dwPhysAddrLen - 1))
                    printf("%.2X\n", (int) pIfRow->bPhysAddr[j]);
                else
                    printf("%.2X-", (int) pIfRow->bPhysAddr[j]);
            }
            printf("\tAdmin Status[%d]:\t %ld\n", i, pIfRow->dwAdminStatus);
            printf("\tOper Status[%d]:\t ", i);
            switch (pIfRow->dwOperStatus) {
            case IF_OPER_STATUS_NON_OPERATIONAL:
                printf("Non Operational\n");
                break;
            case IF_OPER_STATUS_UNREACHABLE:
                printf("Unreachable\n");
                break;
            case IF_OPER_STATUS_DISCONNECTED:
                printf("Disconnected\n");
                break;
            case IF_OPER_STATUS_CONNECTING:
                printf("Connecting\n");
                break;
            case IF_OPER_STATUS_CONNECTED:
                printf("Connected\n");
                break;
            case IF_OPER_STATUS_OPERATIONAL:
                printf("Operational\n");
                break;
            default:
                printf("Unknown status %ld\n", pIfRow->dwAdminStatus);
                break;
            }
            printf("\n");
        }
    } else {
        printf("GetIfTable failed with error: \n", dwRetVal);
        if (pIfTable != NULL) {
            FREE(pIfTable);
            pIfTable = NULL;
        }  
        return 1;
        // Here you can use FormatMessage to find out why 
        // it failed.
    }
    if (pIfTable != NULL) {
        FREE(pIfTable);
        pIfTable = NULL;
    }
    return 0;
}


Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile iphlpapi.h
Bibliothek Iphlpapi.lib
DLL Iphlpapi.dll

Weitere Informationen

GetIfEntry

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetNumberOfInterfaces

IP-Hilfsfunktionsreferenz

MIB_IFROW

MIB_IFTABLE

MIB_IF_ROW2

MIB_IF_TABLE2