Fungsi GetAdaptersInfo (iphlpapi.h)
Fungsi GetAdaptersInfo mengambil informasi adaptor untuk komputer lokal.
Pada Windows XP dan yang lebih baru: Gunakan fungsi GetAdaptersAddresses alih-alih GetAdaptersInfo.
Sintaks
IPHLPAPI_DLL_LINKAGE ULONG GetAdaptersInfo(
[out] PIP_ADAPTER_INFO AdapterInfo,
[in, out] PULONG SizePointer
);
Parameter
[out] AdapterInfo
Penunjuk ke buffer yang menerima daftar tertaut struktur IP_ADAPTER_INFO .
[in, out] SizePointer
Penunjuk ke variabel ULONG yang menentukan ukuran buffer yang diacu oleh parameter pAdapterInfo . Jika ukuran ini tidak cukup untuk menyimpan informasi adaptor, GetAdaptersInfo mengisi variabel ini dengan ukuran yang diperlukan, dan mengembalikan kode kesalahan ERROR_BUFFER_OVERFLOW.
Menampilkan nilai
Jika fungsi berhasil, nilai yang dikembalikan ERROR_SUCCESS (didefinisikan ke nilai yang sama dengan NO_ERROR).
Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Buffer untuk menerima informasi adaptor terlalu kecil. Nilai ini dikembalikan jika ukuran buffer yang ditunjukkan oleh parameter pOutBufLen terlalu kecil untuk menyimpan informasi adaptor atau parameter pAdapterInfo adalah penunjuk NULL . Ketika kode kesalahan ini dikembalikan, parameter pOutBufLen menunjuk ke ukuran buffer yang diperlukan. |
|
Informasi adaptor tidak valid diambil. |
|
Salah satu parameter tidak valid. Kesalahan ini dikembalikan jika parameter pOutBufLen adalah penunjuk NULL , atau proses panggilan tidak memiliki akses baca/tulis ke memori yang ditujukkan oleh pOutBufLen atau proses pemanggilan tidak memiliki akses tulis ke memori yang diacu oleh parameter pAdapterInfo . |
|
Tidak ada informasi adapter untuk komputer lokal. |
|
Fungsi GetAdaptersInfo tidak didukung oleh sistem operasi yang berjalan di komputer lokal. |
|
Jika fungsi gagal, gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan. |
Keterangan
Fungsi GetAdaptersInfo hanya dapat mengambil informasi untuk alamat IPv4.
Dalam versi sebelum Windows 10, urutan munculnya adaptor dalam daftar yang dikembalikan oleh fungsi ini dapat dikontrol dari folder Koneksi Jaringan: pilih item menu Pengaturan Tingkat Lanjut dari menu Tingkat Lanjut. Dimulai dengan Windows 10, pesanan tidak ditentukan.
Fungsi GetAdaptersInfo dan GetInterfaceInfo tidak mengembalikan informasi tentang antarmuka loopback IPv4. Informasi tentang antarmuka loopback dikembalikan oleh fungsi GetIpAddrTable .
Pada Windows XP dan yang lebih baru: Daftar adaptor yang dikembalikan oleh GetAdaptersInfo mencakup adaptor searah. Untuk menghasilkan daftar adaptor yang dapat mengirim dan menerima data, panggil GetUniDirectionalAdapterInfo, dan kecualikan adaptor yang dikembalikan dari daftar yang dikembalikan oleh GetAdaptersInfo.
Contoh
Contoh ini mengambil informasi adaptor dan mencetak berbagai properti dari setiap adaptor.
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main()
{
/* Declare and initialize variables */
// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter.
//
// Note that this sample code only prints out the
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter.
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
pAdapter = pAdapterInfo;
while (pAdapter) {
printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
printf("\tAdapter Addr: \t");
for (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("\tIndex: \t%d\n", pAdapter->Index);
printf("\tType: \t");
switch (pAdapter->Type) {
case MIB_IF_TYPE_OTHER:
printf("Other\n");
break;
case MIB_IF_TYPE_ETHERNET:
printf("Ethernet\n");
break;
case MIB_IF_TYPE_TOKENRING:
printf("Token Ring\n");
break;
case MIB_IF_TYPE_FDDI:
printf("FDDI\n");
break;
case MIB_IF_TYPE_PPP:
printf("PPP\n");
break;
case MIB_IF_TYPE_LOOPBACK:
printf("Loopback\n");
break;
case MIB_IF_TYPE_SLIP:
printf("Slip\n");
break;
default:
printf("Unknown type %ld\n", pAdapter->Type);
break;
}
printf("\tIP Address: \t%s\n",
pAdapter->IpAddressList.IpAddress.String);
printf("\tIP Mask: \t%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 DHCP Server: \t%s\n",
pAdapter->DhcpServer.IpAddress.String);
printf("\t Lease Obtained: ");
/* Display local time */
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
/* asctime_s returns the string terminated by \n\0 */
printf("%s", buffer);
}
printf("\t Lease Expires: ");
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
/* asctime_s returns the string terminated by \n\0 */
printf("%s", buffer);
}
} else
printf("\tDHCP Enabled: No\n");
if (pAdapter->HaveWins) {
printf("\tHave Wins: Yes\n");
printf("\t Primary Wins Server: %s\n",
pAdapter->PrimaryWinsServer.IpAddress.String);
printf("\t Secondary Wins Server: %s\n",
pAdapter->SecondaryWinsServer.IpAddress.String);
} else
printf("\tHave Wins: No\n");
pAdapter = pAdapter->Next;
printf("\n");
}
} else {
printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
}
if (pAdapterInfo)
FREE(pAdapterInfo);
return 0;
}
Persyaratan
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Target Platform | Windows |
Header | iphlpapi.h |
Pustaka | Iphlpapi.lib |
DLL | Iphlpapi.dll |