Partager via


Fonction GetIfTable (iphlpapi.h)

La fonction GetIfTable récupère la table d’interface MIB-II.

Syntaxe

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

Paramètres

[out] pIfTable

Pointeur vers une mémoire tampon qui reçoit la table d’interface en tant que structure MIB_IFTABLE .

[in, out] pdwSize

Lors de l’entrée, spécifie la taille en octets de la mémoire tampon pointée vers le paramètre pIfTable .

En sortie, si la mémoire tampon n’est pas assez grande pour contenir la table d’interface retournée, la fonction définit ce paramètre comme étant la taille de mémoire tampon requise en octets.

[in] bOrder

Valeur booléenne qui spécifie si la table d’interface retournée doit être triée dans l’ordre croissant par index d’interface. Si ce paramètre a la valeur TRUE, la table est triée.

Valeur retournée

Si la fonction réussit, la valeur de retour est NO_ERROR.

Si la fonction échoue, la valeur de retour est l’un des codes d’erreur suivants.

Code de retour Description
ERROR_INSUFFICIENT_BUFFER
La mémoire tampon pointée vers le paramètre pIfTable n’est pas assez grande. La taille requise est retournée dans la variable DWORD pointée vers le paramètre pdwSize .
ERROR_INVALID_PARAMETER
Le paramètre pdwSize a la valeur NULL ou GetIfTable ne peut pas écrire dans la mémoire pointée par le paramètre pdwSize .
ERROR_NOT_SUPPORTED
Cette fonction n’est pas prise en charge sur le système d’exploitation utilisé sur le système local.
Autres
Utilisez la fonction FormatMessage pour obtenir la chaîne de message pour l’erreur retournée.

Notes

The
La fonction GetIfTable énumère les interfaces physiques sur un système local et retourne ces informations dans une structure MIB_IFTABLE . Les interfaces physiques incluent l’interface de bouclage logiciel.

Les fonctions GetIfTable2 et GetIfTable2Ex disponibles sur Windows Vista et versions ultérieures sont une version améliorée de la fonction GetIfTable qui énumère à la fois les interfaces physiques et logiques sur un système local. Les interfaces logiques incluent différentes interfaces WAN Miniport utilisées pour L2TP, PPTP, PPOE et d’autres encapsulations de tunnel.

Les interfaces sont retournées dans une structure MIB_IFTABLE dans la mémoire tampon vers laquelle pointe le paramètre pIfTable . La structure MIB_IFTABLE contient un nombre d’interfaces et un tableau de structures MIB_IFROW pour chaque interface.

Notez que la structure de MIB_IFTABLE retournée pointée vers le paramètre pIfTable peut contenir un remplissage pour l’alignement entre le membre dwNumEntries et la première entrée de tableau MIB_IFROW dans le membre de table de la structure MIB_IFTABLE . Le remplissage pour l’alignement peut également être présent entre les entrées de tableau MIB_IFROW . Tout accès à une entrée de tableau MIB_IFROW doit supposer que le remplissage peut exister.

Exemples

L’exemple suivant récupère la table d’interface et imprime le nombre d’entrées dans la table et certaines données sur chaque entrée.

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


Spécifications

   
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête iphlpapi.h
Bibliothèque Iphlpapi.lib
DLL Iphlpapi.dll

Voir aussi

GetIfEntry

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetNumberOfInterfaces

Informations de référence sur la fonction d’assistance IP

MIB_IFROW

MIB_IFTABLE

MIB_IF_ROW2

MIB_IF_TABLE2