Gestione delle interfacce tramite GetInterfaceInfo
La funzione GetInterfaceInfo riempie un puntatore a una struttura IP_INTERFACE_INFO con informazioni sulle interfacce associate al sistema.
Per usare GetInterfaceInfo
Dichiarare un puntatore a un oggetto IP_INTERFACE_INFO denominato
pInfo
e a un oggetto ULONG denominatoulOutBufLen
. Dichiarare anche un oggetto DWORD denominatodwRetVal
(usato per il controllo degli errori).ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;
Allocare memoria per le strutture.
Nota
Le dimensioni di
ulOutBufLen
non sono sufficienti per contenere le informazioni. Vedere il passaggio successivo.pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);
Effettuare una chiamata iniziale a GetInterfaceInfo per ottenere le dimensioni necessarie nella
ulOutBufLen
variabile.Nota
Questa chiamata alla funzione deve avere esito negativo e viene usata per garantire che la
ulOutBufLen
variabile specifichi una dimensione sufficiente per contenere tutte le informazioni restituite apInfo
. Si tratta di un modello di programmazione comune nell'helper IP per le strutture di dati e le funzioni di questo tipo.if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) { free(pInterfaceInfo); pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen); }
Effettuare una seconda chiamata a GetInterfaceInfo con il controllo degli errori generale e restituirne il valore alla variabile
dwRetVal
DWORD (per un controllo degli errori più avanzato).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
Se la chiamata ha avuto esito positivo, accedere ai dati dalla struttura dei
pInfo
dati.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); } }
Nota
%ws nella prima riga indica una stringa wide. Viene usato perché l'attributo Name della struttura
Adapter
IP_ADAPTER_INDEX_MAP è un WCHAR, ovvero una stringa Unicode.Liberare qualsiasi memoria allocata per la struttura pInfo .
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
Passaggio successivo: Gestione degli indirizzi IP tramite GetIpAddrTable
Passaggio precedente: Gestione delle schede di rete tramite GetAdaptersInfo