Freigeben über


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

  1. 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;
    
    
  2. Zuordnen von Arbeitsspeicher für die Strukturen.

    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    
    
  3. 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 );
    }
    
    
  4. 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);
    }
    
    
    
  5. 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;
    }
    
    
  6. 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