Gestion des cartes réseau à l’aide de GetAdaptersInfo
La fonction GetAdaptersInfo remplit un pointeur vers une structure IP_ADAPTER_INFO avec des informations sur les cartes réseau associées au système.
Pour utiliser GetAdaptersInfo
Déclarez un pointeur vers une variable IP_ADAPTER_INFO 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;
Allouez de la mémoire pour les structures.
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); ulOutBufLen = sizeof(IP_ADAPTER_INFO);
Effectuez un appel initial à GetAdaptersInfo pour obtenir la taille nécessaire dans la variable ulOutBufLen .
Notes
Cet appel à la fonction est destiné à échouer et est utilisé pour garantir 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 courant 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 ); }
Effectuez un deuxième appel à GetAdaptersInfo, en passant pAdapterInfo et ulOutBufLen en tant que paramètres et en effectuant une vérification générale des erreurs. Retourne sa valeur à la variable DWORD dwRetVal (pour une vérification plus approfondie des erreurs).
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) { printf("GetAdaptersInfo call failed with %d\n", dwRetVal); }
Si l’appel a réussi, accédez à certaines des données dans 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; }
Libérez toute 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