Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja GetInterfaceInfo wypełnia wskaźnik do struktury IP_INTERFACE_INFO z informacjami o interfejsach skojarzonych z systemem.
Aby użyć GetInterfaceInfo
Zadeklaruj wskaźnik do obiektu IP_INTERFACE_INFO o nazwie
pInfoi obiektu ULONG o nazwieulOutBufLen. Zadeklaruj również obiekt DWORD o nazwiedwRetVal(używany do sprawdzania błędów).ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;Przydziel pamięć dla struktur.
Uwaga
Rozmiar
ulOutBufLennie jest wystarczający do przechowywania informacji. Zobacz następny krok.pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);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
ulOutBufLenokreśla rozmiar wystarczający do przechowywania wszystkich informacji zwróconych dopInfo. 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); }Wykonaj drugie wywołanie GetInterfaceInfo z ogólnym sprawdzaniem błędów i zwróć jego wartość do
dwRetValzmiennej DWORD (aby uzyskać bardziej zaawansowane sprawdzanie błędów).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }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
Adapterstruktury IP_ADAPTER_INDEX_MAP jest WCHAR, który jest ciągiem Unicode.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