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
Déclarez un pointeur vers un objet IP_INTERFACE_INFO appelé
pInfo
et 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;
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);
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); }
Effectuez un deuxième appel à GetInterfaceInfo avec une vérification générale des erreurs et retournez sa valeur à la variable
dwRetVal
DWORD (pour une vérification des erreurs plus avancée).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
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
Adapter
IP_ADAPTER_INDEX_MAP est une chaîne WCHAR, qui est une chaîne Unicode.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