Freigeben über


Verwalten von Schnittstellen mithilfe von GetInterfaceInfo

Die GetInterfaceInfo--Funktion füllt einen Zeiger auf eine IP_INTERFACE_INFO--Struktur mit Informationen über die Schnittstellen, die dem System zugeordnet sind.

So verwenden Sie getInterfaceInfo

  1. Deklarieren Sie einen Zeiger auf ein IP_INTERFACE_INFO-Objekt, genannt pInfo, und ein ULONG--Objekt, genannt ulOutBufLen. Deklarieren Sie außerdem ein DWORD--Objekt, das als dwRetVal bezeichnet wird (wird für die Fehlerüberprüfung verwendet).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Weisen Sie Speicher für die Strukturen zu.

    Anmerkung

    Die Größe der ulOutBufLen reicht 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);
    
    
  3. Rufen Sie zunächst GetInterfaceInfo- auf, um die erforderliche Größe in die variable ulOutBufLen abzurufen.

    Anmerkung

    Dieser Aufruf der Funktion soll fehlschlagen und wird verwendet, um sicherzustellen, dass die ulOutBufLen Variable eine Größe angibt, die ausreicht, um alle an pInfozurückgegebenen Informationen zu halten. Dies ist ein gängiges Programmiermodell in der IP-Hilfsfunktion für Datenstrukturen und Funktionen dieses Typs.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Rufen Sie GetInterfaceInfo ein zweites Mal mit allgemeiner Fehlerüberprüfung auf, 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);
        }
    
  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);
            }
        }
    

    Anmerkung

    Die %ws in der ersten Zeile kennzeichnet einen breiten String. Dies wird verwendet, da das Name Attribut der IP_ADAPTER_INDEX_MAP Struktur Adapter ein WCHAR-ist, bei dem es sich um eine Unicode-Zeichenfolge handelt.

     

  6. Geben Sie alle speicherzuweisungen für die pInfo--Struktur 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-