Mengambil Informasi Menggunakan GetNetworkParams
Fungsi GetNetworkParams mengisi penunjuk ke struktur FIXED_INFO dengan data tentang pengaturan jaringan saat ini.
Untuk menggunakan GetNetworkParams
Deklarasikan penunjuk ke objek FIXED_INFO yang disebut pFixedInfo, dan objek ULONG yang disebut ulOutBufLen. Variabel ini diteruskan sebagai parameter ke fungsi GetNetworkParams . Buat juga variabel DWORDdwRetVal (digunakan untuk pemeriksaan kesalahan).
FIXED_INFO *pFixedInfo; IP_ADDR_STRING *pIPAddr; ULONG ulOutBufLen; DWORD dwRetVal;
Alokasikan memori untuk struktur.
Catatan
Ukuran ulOutBufLen tidak cukup untuk menyimpan informasi. Lihat langkah selanjutnya.
pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO)); ulOutBufLen = sizeof (FIXED_INFO);
Lakukan panggilan awal ke GetNetworkParams untuk mendapatkan ukuran yang diperlukan untuk variabel ulOutBufLen .
Catatan
Fungsi fungsi ini akan gagal, dan digunakan untuk memastikan bahwa variabel ulOutBufLen menentukan ukuran yang cukup untuk menyimpan semua data yang dikembalikan ke pFixedInfo. Ini adalah model pemrograman umum untuk struktur data dan fungsi jenis ini.
if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pFixedInfo); pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen); if (pFixedInfo == NULL) { printf("Error allocating memory needed to call GetNetworkParams\n"); } }
Lakukan panggilan kedua ke GetNetworkParams menggunakan pemeriksaan kesalahan umum dan mengembalikan nilainya ke variabel DWORDdwRetVal; digunakan untuk pemeriksaan kesalahan tingkat lanjut.
if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) { printf("GetNetworkParams failed with error %d\n", dwRetVal); if (pFixedInfo) { free(pFixedInfo); } }
Jika panggilan berhasil, akses data dari struktur data pFixedInfo .
printf("\tHost Name: %s\n", pFixedInfo->HostName); printf("\tDomain Name: %s\n", pFixedInfo->DomainName); printf("\tDNS Servers:\n"); printf("\t\t%s\n", pFixedInfo->DnsServerList.IpAddress.String); pIPAddr = pFixedInfo->DnsServerList.Next; while (pIPAddr) { printf("\t\t%s\n", pIPAddr->IpAddress.String); pIPAddr = pIPAddr->Next; } printf("\tNode Type: "); switch (pFixedInfo->NodeType) { case 1: printf("%s\n", "Broadcast"); break; case 2: printf("%s\n", "Peer to peer"); break; case 4: printf("%s\n", "Mixed"); break; case 8: printf("%s\n", "Hybrid"); break; default: printf("\n"); } printf("\tNetBIOS Scope ID: %s\n", pFixedInfo->ScopeId); if (pFixedInfo->EnableRouting) printf("\tIP Routing Enabled: Yes\n"); else printf("\tIP Routing Enabled: No\n"); if (pFixedInfo->EnableProxy) printf("\tWINS Proxy Enabled: Yes\n"); else printf("\tWINS Proxy Enabled: No\n"); if (pFixedInfo->EnableDns) printf("\tNetBIOS Resolution Uses DNS: Yes\n"); else printf("\tNetBIOS Resolution Uses DNS: No\n");
Bebaskan memori apa pun yang dialokasikan untuk struktur pFixedInfo .
if (pFixedInfo) { free(pFixedInfo); pFixedInfo = NULL; }
Langkah Selanjutnya: Mengelola adaptor jaringan menggunakan GetAdaptersInfo
Langkah Sebelumnya: Membuat Aplikasi Pembantu IP Dasar