IP_ADAPTER_INFO structure (iptypes.h)
La structure IP_ADAPTER_INFO contient des informations sur une carte réseau particulière sur l’ordinateur local.
Syntaxe
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;
Membres
Next
Type : struct _IP_ADAPTER_INFO*
Pointeur vers l’adaptateur suivant dans la liste des adaptateurs.
ComboIndex
Type : DWORD
Réservé.
AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
Type : char[MAX_ADAPTER_NAME_LENGTH + 4]
Chaîne de caractères ANSI du nom de l’adaptateur.
Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Type : char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Chaîne de caractères ANSI qui contient la description de l’adaptateur.
AddressLength
Type : UINT
Longueur, en octets, de l’adresse matérielle de l’adaptateur.
Address[MAX_ADAPTER_ADDRESS_LENGTH]
Type : BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
Adresse matérielle de l’adaptateur représenté sous la forme d’un tableau BYTE .
Index
Type : DWORD
Index de l’adaptateur.
L’index de l’adaptateur peut changer lorsqu’un adaptateur est désactivé, puis activé, ou dans d’autres circonstances, et ne doit pas être considéré comme persistant.
Type
Type : UINT
Type d’adaptateur. Les valeurs possibles pour le type d’adaptateur sont répertoriées dans le fichier d’en-tête Ipifcons.h .
Le tableau ci-dessous répertorie les valeurs courantes pour le type d’adaptateur, bien que d’autres valeurs soient possibles sur Windows Vista et versions ultérieures.
DhcpEnabled
Type : UINT
Valeur d’option qui spécifie si le protocole DHCP (Dynamic Host Configuration Protocol) est activé pour cet adaptateur.
CurrentIpAddress
Type : PIP_ADDR_STRING
Réservé.
IpAddressList
Type : IP_ADDR_STRING
Liste des adresses IPv4 associées à cet adaptateur représentée sous la forme d’une liste liée de structures IP_ADDR_STRING . Plusieurs adresses IPv4 peuvent être affectées à un adaptateur.
GatewayList
Type : IP_ADDR_STRING
Adresse IPv4 de la passerelle pour cet adaptateur représentée sous la forme d’une liste liée de structures IP_ADDR_STRING . Plusieurs adresses de passerelle IPv4 peuvent être affectées à un adaptateur. Cette liste contient généralement une seule entrée pour l’adresse IPv4 de la passerelle par défaut pour cet adaptateur.
DhcpServer
Type : IP_ADDR_STRING
Adresse IPv4 du serveur DHCP pour cet adaptateur représentée sous la forme d’une liste liée de structures IP_ADDR_STRING . Cette liste contient une seule entrée pour l’adresse IPv4 du serveur DHCP pour cette carte. La valeur 255.255.255.255 indique que le serveur DHCP n’a pas pu être atteint ou est en cours d’atteinte.
Ce membre est valide uniquement lorsque le membre DhcpEnabled est différent de zéro.
HaveWins
Type : BOOL
Valeur d’option qui spécifie si cet adaptateur utilise le service WINS (Windows Internet Name Service).
PrimaryWinsServer
Type : IP_ADDR_STRING
Adresse IPv4 du serveur WINS principal représenté sous la forme d’une liste liée de structures IP_ADDR_STRING . Cette liste contient une seule entrée pour l’adresse IPv4 du serveur WINS principal pour cet adaptateur.
Ce membre est valide uniquement lorsque le membre HaveWins a la valeur TRUE.
SecondaryWinsServer
Type : IP_ADDR_STRING
Adresse IPv4 du serveur WINS secondaire représenté sous la forme d’une liste liée de structures IP_ADDR_STRING . Plusieurs adresses de serveur WINS secondaires peuvent être affectées à un adaptateur.
Ce membre est valide uniquement lorsque le membre HaveWins a la valeur TRUE.
LeaseObtained
Type : time_t
Heure à laquelle le bail DHCP actuel a été obtenu.
Ce membre est valide uniquement lorsque le membre DhcpEnabled est différent de zéro.
LeaseExpires
Type : time_t
Heure à laquelle le bail DHCP actuel expire.
Ce membre est valide uniquement lorsque le membre DhcpEnabled est différent de zéro.
Notes
La structure IP_ADAPTER_INFO est limitée aux informations IPv4 sur une carte réseau particulière sur l’ordinateur local. La structure IP_ADAPTER_INFO est récupérée en appelant la fonction GetAdaptersInfo .
Lorsque vous utilisez Visual Studio 2005 et versions ultérieures, le type de données time_t est défini par défaut sur un type de données de 8 octets, et non sur le type de données de 4 octets utilisé pour les membres LeaseObtained et LeaseExpires sur une plateforme 32 bits. Pour utiliser correctement la structure IP_ADAPTER_INFO sur une plateforme 32 bits, définissez _USE_32BIT_TIME_T (utilisez -D _USE_32BIT_TIME_T
comme option, par exemple) lors de la compilation de l’application pour forcer le type de données time_t à un type de données de 4 octets.
Pour une utilisation sur Windows XP et versions ultérieures , la structure IP_ADAPTER_ADDRESSES contient à la fois des informations IPv4 et IPv6. La fonction GetAdaptersAddresses récupère les informations de l’adaptateur IPv4 et IPv6.
Exemples
Cet exemple récupère les informations de l’adaptateur et imprime différentes propriétés de chaque adaptateur.
#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;
}
Spécifications
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
En-tête | iptypes.h (include Iphlpapi.h) |