Mengelola Antarmuka Menggunakan GetInterfaceInfo
Fungsi GetInterfaceInfo mengisi pointer ke struktur IP_INTERFACE_INFO dengan informasi tentang antarmuka yang terkait dengan sistem.
Untuk menggunakan GetInterfaceInfo
Deklarasikan penunjuk ke objek IP_INTERFACE_INFO yang disebut
pInfo
, dan objek ULONG yang disebutulOutBufLen
. Deklarasikan juga objek DWORD yang disebutdwRetVal
(digunakan untuk pemeriksaan kesalahan).ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;
Alokasikan memori untuk struktur.
Catatan
Ukuran
ulOutBufLen
tidak cukup untuk menyimpan informasi. Lihat langkah selanjutnya.pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);
Lakukan panggilan awal ke GetInterfaceInfo untuk mendapatkan ukuran yang diperlukan ke
ulOutBufLen
dalam variabel.Catatan
Panggilan ke fungsi ini dimaksudkan untuk gagal, dan digunakan untuk memastikan bahwa
ulOutBufLen
variabel menentukan ukuran yang cukup untuk menyimpan semua informasi yang dikembalikan kepInfo
. Ini adalah model pemrograman umum di IP Helper untuk struktur data dan fungsi jenis ini.if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) { free(pInterfaceInfo); pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen); }
Lakukan panggilan kedua ke GetInterfaceInfo dengan pemeriksaan kesalahan umum dan kembalikan nilainya ke variabel
dwRetVal
DWORD (untuk pemeriksaan kesalahan yang lebih canggih).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
Jika panggilan berhasil, akses data dari
pInfo
struktur data.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); } }
Catatan
%ws di baris pertama menunjukkan string lebar. Ini digunakan karena atribut Name dari struktur
Adapter
IP_ADAPTER_INDEX_MAP adalah WCHAR, yang merupakan string Unicode.Bebaskan memori apa pun yang dialokasikan untuk struktur pInfo .
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
Langkah Berikutnya: Mengelola Alamat IP Menggunakan GetIpAddrTable
Langkah Sebelumnya: Mengelola adaptor jaringan menggunakan GetAdaptersInfo