Gestion des cartes réseau à l’aide de GetAdaptersInfo

La fonction GetAdaptersInfo remplit un pointeur vers une structure d’informations d' _ adaptateur _ IP avec des informations sur les cartes réseau associées au système.

Pour utiliser GetAdaptersInfo

  1. Déclarez un pointeur vers une variable d' _ _ informations d’adaptateur IP appelée pAdapterInfo et une variable ULong appelée ulOutBufLen. Ces variables sont passées en tant que paramètres à la fonction GetAdaptersInfo . Créez également une variable DWORD appelée dwRetVal (pour la vérification des erreurs).

    IP_ADAPTER_INFO  *pAdapterInfo;
    ULONG            ulOutBufLen;
    DWORD            dwRetVal;
    
    
  2. Allouez de la mémoire pour les structures.

    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    
    
  3. Effectuez un appel initial à GetAdaptersInfo pour connaître la taille nécessaire dans la variable ulOutBufLen .

    Notes

    Cet appel à la fonction est censé échouer et est utilisé pour s’assurer que la variable ulOutBufLen spécifie une taille suffisante pour contenir toutes les informations retournées à pAdapterInfo. Il s’agit d’un modèle de programmation commun pour les structures de données et les fonctions de ce type.

    if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
        free (pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen );
    }
    
    
  4. Effectuez un deuxième appel à GetAdaptersInfo, en passant pAdapterInfo et ulOutBufLen comme paramètres et en procédant à une vérification générale des erreurs. Retournez sa valeur à la variable DWORD dwRetVal (pour une vérification des erreurs plus poussée).

    if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
        printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
    }
    
    
    
  5. Si l’appel a réussi, accédez à certaines des données de la structure pAdapterInfo .

    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        printf("Adapter Name: %s\n", pAdapter->AdapterName);
        printf("Adapter Desc: %s\n", pAdapter->Description);
        printf("\tAdapter Addr: \t");
        for (UINT 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("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
        printf("IP Mask: %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\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
        }
        else
          printf("\tDHCP Enabled: No\n");
    
      pAdapter = pAdapter->Next;
    }
    
    
  6. Libérez la mémoire allouée pour la structure pAdapterInfo .

    if (pAdapterInfo)
            free(pAdapterInfo);
    
    

Étape suivante : gestion des interfaces à l’aide de GetInterfaceInfo

Étape précédente : récupération d’informations à l’aide de GetNetworkParams