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

  1. Deklarieren Sie einen Zeiger auf ein IP _ INTERFACE _ INFO-Objekt mit dem Namen pInfo und ein ULONG-Objekt mit dem Namen 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 Arbeitsspeicher für die Strukturen zu.

    Hinweis

    Die Größe von 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 für die Variable benötigte Größe ulOutBufLen zu 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 ulOutBufLen Informationen zu pInfo enthalten. 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-Variable zurück (für eine erweiterte dwRetVal 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 über die Datenstruktur pInfo auf 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 Adapter sich um eine Unicode-Zeichenfolge handelt.

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