Partager via


Fonction GetAdaptersInfo (iphlpapi.h)

La fonction GetAdaptersInfo récupère les informations de l’adaptateur pour l’ordinateur local.

Sur Windows XP et versions ultérieures : Utilisez la fonction GetAdaptersAddresses au lieu de GetAdaptersInfo.

Syntaxe

IPHLPAPI_DLL_LINKAGE ULONG GetAdaptersInfo(
  [out]     PIP_ADAPTER_INFO AdapterInfo,
  [in, out] PULONG           SizePointer
);

Paramètres

[out] AdapterInfo

Pointeur vers une mémoire tampon qui reçoit une liste liée de structures IP_ADAPTER_INFO .

[in, out] SizePointer

Pointeur vers une variable ULONG qui spécifie la taille de la mémoire tampon vers laquelle pointe le paramètre pAdapterInfo . Si cette taille est insuffisante pour contenir les informations de l’adaptateur, GetAdaptersInfo remplit cette variable avec la taille requise et retourne un code d’erreur de ERROR_BUFFER_OVERFLOW.

Valeur retournée

Si la fonction réussit, la valeur de retour est ERROR_SUCCESS (définie sur la même valeur que NO_ERROR).

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

Code de retour Description
ERROR_BUFFER_OVERFLOW
La mémoire tampon pour recevoir les informations de l’adaptateur est trop petite. Cette valeur est retournée si la taille de mémoire tampon indiquée par le paramètre pOutBufLen est trop petite pour contenir les informations de l’adaptateur ou si le paramètre pAdapterInfo était un pointeur NULL . Lorsque ce code d’erreur est retourné, le paramètre pOutBufLen pointe vers la taille de mémoire tampon requise.
ERROR_INVALID_DATA
Des informations d’adaptateur non valides ont été récupérées.
ERROR_INVALID_PARAMETER
L’un des paramètres n’est pas valide. Cette erreur est retournée si le paramètre pOutBufLen est un pointeur NULL , si le processus appelant n’a pas d’accès en lecture/écriture à la mémoire pointée par pOutBufLen ou si le processus appelant n’a pas d’accès en écriture à la mémoire pointée par le paramètre pAdapterInfo .
ERROR_NO_DATA
Il n’existe aucune information sur l’adaptateur pour l’ordinateur local.
ERROR_NOT_SUPPORTED
La fonction GetAdaptersInfo n’est pas prise en charge par le système d’exploitation s’exécutant sur l’ordinateur local.
Autres
Si la fonction échoue, utilisez FormatMessage pour obtenir la chaîne de message correspondant à l’erreur retournée.

Notes

La fonction GetAdaptersInfo peut récupérer des informations uniquement pour les adresses IPv4.

Dans les versions antérieures à Windows 10, l’ordre dans lequel les cartes apparaissent dans la liste renvoyée par cette fonction peut être contrôlé à partir du dossier Connexions réseau : sélectionnez l’élément de menu Paramètres avancés dans le menu Avancé. À compter de Windows 10, l’ordre n’est pas spécifié.

Les fonctions GetAdaptersInfo et GetInterfaceInfo ne retournent pas d’informations sur l’interface de bouclage IPv4. Les informations sur l’interface de bouclage sont retournées par la fonction GetIpAddrTable .

Sur Windows XP et versions ultérieures : La liste des adaptateurs retournés par GetAdaptersInfo inclut les cartes unidirectionnelles. Pour générer une liste d’adaptateurs capables d’envoyer et de recevoir des données, appelez GetUniDirectionalAdapterInfo et excluez les adaptateurs retournés de la liste retournée par GetAdaptersInfo.

Exemples

Cet exemple récupère les informations de l’adaptateur et imprime les différentes propriétés de chaque adaptateur.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")

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

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

int __cdecl main()
{

    /* Declare and initialize variables */

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter. 
//
// Note that this sample code only prints out the 
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter. 

    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    UINT i;

/* variables used to print DHCP time info */
    struct tm newtime;
    char buffer[32];
    errno_t error;

    ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
        return 1;
    }
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        FREE(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
        if (pAdapterInfo == NULL) {
            printf("Error allocating memory needed to call GetAdaptersinfo\n");
            return 1;
        }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
            printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
            printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
            printf("\tAdapter Addr: \t");
            for (i = 0; i < pAdapter->AddressLength; i++) {
                if (i == (pAdapter->AddressLength - 1))
                    printf("%.2X\n", (int) pAdapter->Address[i]);
                else
                    printf("%.2X-", (int) pAdapter->Address[i]);
            }
            printf("\tIndex: \t%d\n", pAdapter->Index);
            printf("\tType: \t");
            switch (pAdapter->Type) {
            case MIB_IF_TYPE_OTHER:
                printf("Other\n");
                break;
            case MIB_IF_TYPE_ETHERNET:
                printf("Ethernet\n");
                break;
            case MIB_IF_TYPE_TOKENRING:
                printf("Token Ring\n");
                break;
            case MIB_IF_TYPE_FDDI:
                printf("FDDI\n");
                break;
            case MIB_IF_TYPE_PPP:
                printf("PPP\n");
                break;
            case MIB_IF_TYPE_LOOPBACK:
                printf("Loopback\n");
                break;
            case MIB_IF_TYPE_SLIP:
                printf("Slip\n");
                break;
            default:
                printf("Unknown type %ld\n", pAdapter->Type);
                break;
            }

            printf("\tIP Address: \t%s\n",
                   pAdapter->IpAddressList.IpAddress.String);
            printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

            printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
            printf("\t***\n");

            if (pAdapter->DhcpEnabled) {
                printf("\tDHCP Enabled: Yes\n");
                printf("\t  DHCP Server: \t%s\n",
                       pAdapter->DhcpServer.IpAddress.String);

                printf("\t  Lease Obtained: ");
                /* Display local time */
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }

                printf("\t  Lease Expires:  ");
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }
            } else
                printf("\tDHCP Enabled: No\n");

            if (pAdapter->HaveWins) {
                printf("\tHave Wins: Yes\n");
                printf("\t  Primary Wins Server:    %s\n",
                       pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("\t  Secondary Wins Server:  %s\n",
                       pAdapter->SecondaryWinsServer.IpAddress.String);
            } else
                printf("\tHave Wins: No\n");
            pAdapter = pAdapter->Next;
            printf("\n");
        }
    } else {
        printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

    }
    if (pAdapterInfo)
        FREE(pAdapterInfo);

    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

GetAdaptersAddresses

GetInterfaceInfo

GetIpAddrTable

GetNumberOfInterfaces

GetUniDirectionalAdapterInfo

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

Page d’accueil de l’assistance IP

IP_ADAPTER_INFO