Partager via


Gestion des interfaces à l’aide de GetInterfaceInfo

La fonction GetInterfaceInfo remplit un pointeur vers une structure de IP_INTERFACE_INFO avec des informations sur les interfaces associées au système.

Pour utiliser GetInterfaceInfo

  1. Déclarez un pointeur vers un objet IP_INTERFACE_INFO appelé pInfoet un objet ULONG appelé ulOutBufLen. Déclarez également un objet DWORD appelé dwRetVal (utilisé pour la vérification des erreurs).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Allouez de la mémoire pour les structures.

    Notes

    La taille de n’est ulOutBufLen pas suffisante pour contenir les informations. Consultez l’étape suivante.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. Effectuez un appel initial à GetInterfaceInfo pour obtenir la taille nécessaire dans la ulOutBufLen variable.

    Notes

    Cet appel à la fonction est destiné à échouer et permet de s’assurer que la ulOutBufLen variable spécifie une taille suffisante pour contenir toutes les informations retournées à pInfo. Il s’agit d’un modèle de programmation courant dans IP Helper pour les structures de données et les fonctions de ce type.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Effectuez un deuxième appel à GetInterfaceInfo avec une vérification générale des erreurs et retournez sa valeur à la variable dwRetValDWORD (pour une vérification des erreurs plus avancée).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. Si l’appel a réussi, accédez aux données à partir de la pInfo structure de données.

            printf("  GetInterfaceInfo succeeded.\n");
    
            printf("  Num Adapters: %ld\n\n", pInterfaceInfo->NumAdapters);
            for (i = 0; i < (unsigned int) pInterfaceInfo->NumAdapters; i++) {
                printf("  Adapter Index[%d]: %ld\n", i,
                       pInterfaceInfo->Adapter[i].Index);
                printf("  Adapter Name[%d]:  %ws\n\n", i,
                       pInterfaceInfo->Adapter[i].Name);
            }
        }
    

    Notes

    %ws de la première ligne indique une chaîne large. Cela est utilisé, car l’attribut Name de la structure AdapterIP_ADAPTER_INDEX_MAP est une chaîne WCHAR, qui est une chaîne Unicode.

     

  6. Libérez toute la mémoire allouée à la structure pInfo .

        if (pInterfaceInfo) {
            free(pInterfaceInfo);
            pInterfaceInfo = NULL;
        }
    

Étape suivante : Gestion des adresses IP à l’aide de GetIpAddrTable

Étape précédente : Gestion des cartes réseau à l’aide de GetAdaptersInfo