Mengelola Adaptor Jaringan Menggunakan GetAdaptersInfo
Fungsi GetAdaptersInfo mengisi penunjuk ke struktur IP_ADAPTER_INFO dengan informasi tentang adaptor jaringan yang terkait dengan sistem.
Untuk menggunakan GetAdaptersInfo
Deklarasikan penunjuk ke variabel IP_ADAPTER_INFO yang disebut pAdapterInfo, dan variabel ULONG yang disebut ulOutBufLen. Variabel ini diteruskan sebagai parameter ke fungsi GetAdaptersInfo . Buat juga variabel DWORD yang disebut dwRetVal (untuk pemeriksaan kesalahan).
IP_ADAPTER_INFO *pAdapterInfo; ULONG ulOutBufLen; DWORD dwRetVal;
Alokasikan memori untuk struktur.
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); ulOutBufLen = sizeof(IP_ADAPTER_INFO);
Lakukan panggilan awal ke GetAdaptersInfo untuk mendapatkan ukuran yang diperlukan ke dalam variabel ulOutBufLen .
Catatan
Panggilan ke fungsi ini dimaksudkan untuk gagal, dan digunakan untuk memastikan bahwa variabel ulOutBufLen menentukan ukuran yang cukup untuk menyimpan semua informasi yang dikembalikan ke pAdapterInfo. Ini adalah model pemrograman umum untuk struktur dan fungsi data jenis ini.
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) { free (pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen ); }
Lakukan panggilan kedua ke GetAdaptersInfo, melewati pAdapterInfo dan ulOutBufLen sebagai parameter dan melakukan pemeriksaan kesalahan umum. Mengembalikan nilainya ke variabel DWORDdwRetVal (untuk pemeriksaan kesalahan yang lebih luas).
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) { printf("GetAdaptersInfo call failed with %d\n", dwRetVal); }
Jika panggilan berhasil, akses beberapa data dalam struktur pAdapterInfo .
PIP_ADAPTER_INFO pAdapter = pAdapterInfo; while (pAdapter) { printf("Adapter Name: %s\n", pAdapter->AdapterName); printf("Adapter Desc: %s\n", pAdapter->Description); printf("\tAdapter Addr: \t"); for (UINT i = 0; i < pAdapter->AddressLength; i++) { if (i == (pAdapter->AddressLength - 1)) printf("%.2X\n",(int)pAdapter->Address[i]); else printf("%.2X-",(int)pAdapter->Address[i]); } printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String); printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String); printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String); printf("\t***\n"); if (pAdapter->DhcpEnabled) { printf("\tDHCP Enabled: Yes\n"); printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String); } else printf("\tDHCP Enabled: No\n"); pAdapter = pAdapter->Next; }
Bebaskan memori apa pun yang dialokasikan untuk struktur pAdapterInfo .
if (pAdapterInfo) free(pAdapterInfo);
Langkah Berikutnya: Mengelola Antarmuka Menggunakan GetInterfaceInfo
Langkah Sebelumnya: Mengambil Informasi Menggunakan GetNetworkParams