Verwalten von Schnittstellen mit GetInterfaceInfo
Die GetInterfaceInfo-Funktion füllt einen Zeiger auf eine IP INTERFACE _ _ INFO-Struktur mit Informationen zu den Schnittstellen, die dem System zugeordnet sind.
So verwenden Sie GetInterfaceInfo
Deklarieren Sie einen Zeiger auf ein IP _ INTERFACE _ INFO-Objekt mit dem Namen
pInfound ein ULONG-Objekt mit dem NamenulOutBufLen. 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 Arbeitsspeicher für die Strukturen zu.
Hinweis
Die Größe von
ulOutBufLenreicht nicht aus, um die Informationen zu enthalten. Weitere Informationen finden Sie im nächsten Schritt.pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);Rufen Sie zunächst GetInterfaceInfo auf, um die für die Variable benötigte Größe
ulOutBufLenzu erhalten.Hinweis
Dieser Aufruf der -Funktion ist für einen Fehler gedacht und wird verwendet, um sicherzustellen, dass die Variable eine Größe angibt, die ausreicht, um alle an zurückgegebenen
ulOutBufLenInformationen zupInfoenthalten. 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 zurück (für eine erweiterte
dwRetValFehlerüberprüfung).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }Wenn der Aufruf erfolgreich war, greifen Sie über die Datenstruktur
pInfoauf die Daten 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
%ws in der ersten Zeile gibt eine breite Zeichenfolge an. Dies wird verwendet, da das Name-Attribut der INDEX MAP-Struktur des _ _ _ IP-Adapters ein WCHAR ist, bei dem es
Adaptersich um eine Unicode-Zeichenfolge handelt.Geben Sie den für die pInfo-Struktur zugeordneten Arbeitsspeicher frei.
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
Nächster Schritt: Verwalten von IP-Adressen mit GetIpAddrTable
Vorheriger Schritt: Verwalten von Netzwerkadaptern mit GetAdaptersInfo