Udostępnij przez


Zarządzanie interfejsami przy użyciu polecenia GetInterfaceInfo

Funkcja GetInterfaceInfo wypełnia wskaźnik do struktury IP_INTERFACE_INFO z informacjami o interfejsach skojarzonych z systemem.

Aby użyć GetInterfaceInfo

  1. Zadeklaruj wskaźnik do obiektu IP_INTERFACE_INFO o nazwie pInfoi obiektu ULONG o nazwie ulOutBufLen. Zadeklaruj również obiekt DWORD o nazwie dwRetVal (używany do sprawdzania błędów).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Przydziel pamięć dla struktur.

    Uwaga

    Rozmiar ulOutBufLen nie jest wystarczający do przechowywania informacji. Zobacz następny krok.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. Wykonaj początkowe wywołanie polecenia GetInterfaceInfo, aby uzyskać wymagany rozmiar, który należy umieścić w zmiennej ulOutBufLen.

    Notatka

    To wywołanie funkcji ma zakończyć się niepowodzeniem i służy do zapewnienia, że zmienna ulOutBufLen określa rozmiar wystarczający do przechowywania wszystkich informacji zwróconych do pInfo. Jest to typowy model programowania w pomocniku IP dla struktur danych i funkcji tego typu.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Wykonaj drugie wywołanie GetInterfaceInfo z ogólnym sprawdzaniem błędów i zwróć jego wartość do dwRetVal zmiennej DWORD (aby uzyskać bardziej zaawansowane sprawdzanie błędów).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. Jeśli wywołanie zakończyło się pomyślnie, uzyskaj dostęp do danych ze struktury danych pInfo.

            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);
            }
        }
    

    Notatka

    %ws w pierwszym wierszu oznacza szeroki ciąg. Jest to używane, ponieważ atrybut name Adapter struktury IP_ADAPTER_INDEX_MAP jest WCHAR, który jest ciągiem Unicode.

     

  6. Zwolnij dowolną pamięć przydzieloną dla struktury pInfo.

        if (pInterfaceInfo) {
            free(pInterfaceInfo);
            pInterfaceInfo = NULL;
        }
    

Następny krok: zarządzanie adresami IP przy użyciu metody GetIpAddrTable

Poprzedni krok: Zarządzanie kartami sieciowymi przy użyciu funkcji GetAdaptersInfo