struktur IP_ADAPTER_INFO (iptypes.h)
Struktur IP_ADAPTER_INFO berisi informasi tentang adaptor jaringan tertentu pada komputer lokal.
Sintaks
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO *Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
Anggota
Next
Jenis: struct _IP_ADAPTER_INFO*
Penunjuk ke adaptor berikutnya dalam daftar adaptor.
ComboIndex
Jenis: DWORD
Dicadangkan.
AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
Jenis: char[MAX_ADAPTER_NAME_LENGTH + 4]
String karakter ANSI dari nama adaptor.
Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Jenis: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
String karakter ANSI yang berisi deskripsi adaptor.
AddressLength
Jenis: UINT
Panjang, dalam byte, dari alamat perangkat keras untuk adaptor.
Address[MAX_ADAPTER_ADDRESS_LENGTH]
Jenis: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
Alamat perangkat keras untuk adaptor direpresentasikan sebagai array BYTE .
Index
Jenis: DWORD
Indeks adaptor.
Indeks adaptor dapat berubah ketika adaptor dinonaktifkan dan kemudian diaktifkan, atau dalam keadaan lain, dan tidak boleh dianggap persisten.
Type
Jenis: UINT
Jenis adaptor. Nilai yang mungkin untuk jenis adaptor tercantum dalam file header Ipifcons.h .
Tabel di bawah ini mencantumkan nilai umum untuk jenis adaptor meskipun nilai lain dimungkinkan pada Windows Vista dan yang lebih baru.
DhcpEnabled
Jenis: UINT
Nilai opsi yang menentukan apakah protokol konfigurasi host dinamis (DHCP) diaktifkan untuk adaptor ini.
CurrentIpAddress
Jenis: PIP_ADDR_STRING
Dicadangkan.
IpAddressList
Jenis: IP_ADDR_STRING
Daftar alamat IPv4 yang terkait dengan adaptor ini direpresentasikan sebagai daftar tertaut struktur IP_ADDR_STRING . Adaptor dapat memiliki beberapa alamat IPv4 yang ditetapkan untuk itu.
GatewayList
Jenis: IP_ADDR_STRING
Alamat IPv4 gateway untuk adaptor ini direpresentasikan sebagai daftar tertaut struktur IP_ADDR_STRING . Adaptor dapat memiliki beberapa alamat gateway IPv4 yang ditetapkan untuknya. Daftar ini biasanya berisi satu entri untuk alamat IPv4 gateway default untuk adaptor ini.
DhcpServer
Jenis: IP_ADDR_STRING
Alamat IPv4 server DHCP untuk adaptor ini direpresentasikan sebagai daftar tertaut struktur IP_ADDR_STRING . Daftar ini berisi entri tunggal untuk alamat IPv4 server DHCP untuk adaptor ini. Nilai 255.255.255.255 menunjukkan server DHCP tidak dapat dicapai, atau sedang dalam proses tercapai.
Anggota ini hanya valid ketika anggota DhcpEnabled bukan nol.
HaveWins
Jenis: BOOL
Nilai opsi yang menentukan apakah adaptor ini menggunakan Windows Internet Name Service (WINS).
PrimaryWinsServer
Jenis: IP_ADDR_STRING
Alamat IPv4 server WINS utama direpresentasikan sebagai daftar tertaut struktur IP_ADDR_STRING . Daftar ini berisi satu entri untuk alamat IPv4 server WINS utama untuk adaptor ini.
Anggota ini hanya valid ketika anggota HaveWinstrue.
SecondaryWinsServer
Jenis: IP_ADDR_STRING
Alamat IPv4 dari server WINS sekunder direpresentasikan sebagai daftar tertaut struktur IP_ADDR_STRING . Adaptor dapat memiliki beberapa alamat server WINS sekunder yang ditetapkan untuk itu.
Anggota ini hanya valid ketika anggota HaveWinstrue.
LeaseObtained
Jenis: time_t
Waktu ketika sewa DHCP saat ini diperoleh.
Anggota ini hanya valid ketika anggota DhcpEnabled bukan nol.
LeaseExpires
Jenis: time_t
Waktu ketika sewa DHCP saat ini kedaluwarsa.
Anggota ini hanya valid ketika anggota DhcpEnabled bukan nol.
Keterangan
Struktur IP_ADAPTER_INFO terbatas pada informasi IPv4 tentang adaptor jaringan tertentu di komputer lokal. Struktur IP_ADAPTER_INFO diambil dengan memanggil fungsi GetAdaptersInfo .
Saat menggunakan Visual Studio 2005 dan yang lebih baru, time_t datatype default ke datatype 8-byte, bukan datatype 4-byte yang digunakan untuk anggota LeaseObtained dan LeaseExpires pada platform 32-bit. Untuk menggunakan struktur IP_ADAPTER_INFO dengan benar pada platform 32-bit, tentukan _USE_32BIT_TIME_T (gunakan -D _USE_32BIT_TIME_T
sebagai opsi, misalnya) saat mengkompilasi aplikasi untuk memaksa jenis data time_t ke jenis data 4-byte.
Untuk digunakan pada Windows XP dan yang lebih baru, struktur IP_ADAPTER_ADDRESSES berisi informasi IPv4 dan IPv6. Fungsi GetAdaptersAddresses mengambil informasi adaptor IPv4 dan IPv6.
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("Lookback\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] |
Header | iptypes.h (termasuk Iphlpapi.h) |