Freigeben über


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

  1. Deklarieren Sie einen Zeiger auf ein IP_INTERFACE_INFO-Objekt namens pInfound ein ULONG-Objekt namens ulOutBufLen. Deklarieren Sie auch ein DWORD-Objekt namens dwRetVal (wird für die Fehlerüberprüfung verwendet).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. 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);
    
    
  3. 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 zu pInfospeichern. 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);
        }
    
  4. Führen Sie einen zweiten Aufruf von GetInterfaceInfo mit allgemeiner Fehlerüberprüfung durch, und geben Sie den Wert an die DWORD-VariabledwRetVal zurück (für eine erweiterte Fehlerüberprüfung).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. 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-StrukturAdapter eine WCHAR ist, bei der es sich um eine Unicode-Zeichenfolge handelt.

     

  6. 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