Verwalten von Netzwerkadaptern mithilfe von GetAdaptersInfo
Die GetAdaptersInfo-Funktion füllt einen Zeiger auf eine IP_ADAPTER_INFO-Struktur mit Informationen zu den Netzwerkadaptern, die dem System zugeordnet sind.
So verwenden Sie GetAdaptersInfo
Deklarieren Sie einen Zeiger auf eine IP_ADAPTER_INFO Variable namens pAdapterInfo und eine ULONG-Variable namens ulOutBufLen. Diese Variablen werden als Parameter an die GetAdaptersInfo-Funktion übergeben. Erstellen Sie auch eine DWORD-Variable namens dwRetVal (zur Fehlerüberprüfung).
IP_ADAPTER_INFO *pAdapterInfo; ULONG ulOutBufLen; DWORD dwRetVal;
Zuordnen von Arbeitsspeicher für die Strukturen.
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); ulOutBufLen = sizeof(IP_ADAPTER_INFO);
Führen Sie einen ersten Aufruf von GetAdaptersInfo durch, um die erforderliche Größe für die ulOutBufLen-Variable abzurufen.
Hinweis
Dieser Aufruf der -Funktion soll fehlschlagen und wird verwendet, um sicherzustellen, dass die UlOutBufLen-Variable eine Größe angibt, die ausreicht, um alle an pAdapterInfo zurückgegebenen Informationen zu speichern. Dies ist ein gängiges Programmiermodell für Datenstrukturen und Funktionen dieses Typs.
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) { free (pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen ); }
Führen Sie einen zweiten Aufruf von GetAdaptersInfo durch, übergeben Sie pAdapterInfo und ulOutBufLen als Parameter, und führen Sie eine allgemeine Fehlerüberprüfung durch. Geben Sie den Wert an die DWORD-VariabledwRetVal zurück (für eine umfangreichere Fehlerüberprüfung).
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) { printf("GetAdaptersInfo call failed with %d\n", dwRetVal); }
Wenn der Aufruf erfolgreich war, greifen Sie auf einige der Daten in der pAdapterInfo-Struktur zu.
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; }
Geben Sie den für die pAdapterInfo-Struktur zugewiesenen Arbeitsspeicher frei.
if (pAdapterInfo) free(pAdapterInfo);
Nächster Schritt: Verwalten von Schnittstellen mithilfe von GetInterfaceInfo
Vorheriger Schritt: Abrufen von Informationen mithilfe von GetNetworkParams