Verwalten von Schnittstellen mithilfe von GetInterfaceInfo
Die GetInterfaceInfo-Funktion füllt einen Zeiger auf eine IP_INTERFACE_INFO-Struktur mit Informationen zu den dem System zugeordneten Schnittstellen aus.
So verwenden Sie GetInterfaceInfo
Deklarieren Sie einen Zeiger auf ein IP_INTERFACE_INFO-Objekt namens
pInfo
und ein ULONG-Objekt namensulOutBufLen
. Deklarieren Sie auch ein DWORD-Objekt namensdwRetVal
(wird für die Fehlerüberprüfung verwendet).ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;
Ordnen Sie den Strukturen Arbeitsspeicher zu.
Hinweis
Die Größe von
ulOutBufLen
reicht nicht aus, um die Informationen zu enthalten. Mehr dazu finden Sie im nächsten Schritt.pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);
Führen Sie einen ersten Aufruf von GetInterfaceInfo aus, um die erforderliche Größe in die
ulOutBufLen
Variable abzurufen.Hinweis
Dieser Aufruf der Funktion ist für einen Fehler vorgesehen und wird verwendet, um sicherzustellen, dass die Variable eine Größe angibt, die
ulOutBufLen
ausreicht, um alle an zurückgegebenen Informationen zupInfo
speichern. Dies ist ein gängiges Programmiermodell im IP-Hilfsprogramm für Datenstrukturen und Funktionen dieses Typs.if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) { free(pInterfaceInfo); pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen); }
Führen Sie einen zweiten Aufruf von GetInterfaceInfo mit allgemeiner Fehlerüberprüfung durch, und geben Sie den Wert an die DWORD-Variable
dwRetVal
zurück (für eine erweiterte Fehlerüberprüfung).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
Wenn der Aufruf erfolgreich war, greifen Sie auf die Daten aus der
pInfo
Datenstruktur zu.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); } }
Hinweis
Die %ws in der ersten Zeile kennzeichnet eine breite Zeichenfolge. Dies wird verwendet, da das Name-Attribut der IP_ADAPTER_INDEX_MAP-Struktur
Adapter
eine WCHAR ist, bei der es sich um eine Unicode-Zeichenfolge handelt.Geben Sie den für die pInfo-Struktur zugewiesenen Arbeitsspeicher frei.
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
Nächster Schritt: Verwalten von IP-Adressen mithilfe von GetIpAddrTable
Vorheriger Schritt: Verwalten von Netzwerkadaptern mithilfe von GetAdaptersInfo