structure IP_ADAPTER_ADDRESSES_LH (iptypes.h)

La structure IP_ADAPTER_ADDRESSES est le nœud d’en-tête d’une liste liée d’adresses pour un adaptateur particulier. Cette structure peut être utilisée simultanément dans le cadre d’une liste liée de structures IP_ADAPTER_ADDRESSES .

Syntaxe

typedef struct _IP_ADAPTER_ADDRESSES_LH {
  union {
    ULONGLONG Alignment;
    struct {
      ULONG    Length;
      IF_INDEX IfIndex;
    };
  };
  struct _IP_ADAPTER_ADDRESSES_LH    *Next;
  PCHAR                              AdapterName;
  PIP_ADAPTER_UNICAST_ADDRESS_LH     FirstUnicastAddress;
  PIP_ADAPTER_ANYCAST_ADDRESS_XP     FirstAnycastAddress;
  PIP_ADAPTER_MULTICAST_ADDRESS_XP   FirstMulticastAddress;
  PIP_ADAPTER_DNS_SERVER_ADDRESS_XP  FirstDnsServerAddress;
  PWCHAR                             DnsSuffix;
  PWCHAR                             Description;
  PWCHAR                             FriendlyName;
  BYTE                               PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
  ULONG                              PhysicalAddressLength;
  union {
    ULONG Flags;
    struct {
      ULONG DdnsEnabled : 1;
      ULONG RegisterAdapterSuffix : 1;
      ULONG Dhcpv4Enabled : 1;
      ULONG ReceiveOnly : 1;
      ULONG NoMulticast : 1;
      ULONG Ipv6OtherStatefulConfig : 1;
      ULONG NetbiosOverTcpipEnabled : 1;
      ULONG Ipv4Enabled : 1;
      ULONG Ipv6Enabled : 1;
      ULONG Ipv6ManagedAddressConfigurationSupported : 1;
    };
  };
  ULONG                              Mtu;
  IFTYPE                             IfType;
  IF_OPER_STATUS                     OperStatus;
  IF_INDEX                           Ipv6IfIndex;
  ULONG                              ZoneIndices[16];
  PIP_ADAPTER_PREFIX_XP              FirstPrefix;
  ULONG64                            TransmitLinkSpeed;
  ULONG64                            ReceiveLinkSpeed;
  PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
  PIP_ADAPTER_GATEWAY_ADDRESS_LH     FirstGatewayAddress;
  ULONG                              Ipv4Metric;
  ULONG                              Ipv6Metric;
  IF_LUID                            Luid;
  SOCKET_ADDRESS                     Dhcpv4Server;
  NET_IF_COMPARTMENT_ID              CompartmentId;
  NET_IF_NETWORK_GUID                NetworkGuid;
  NET_IF_CONNECTION_TYPE             ConnectionType;
  TUNNEL_TYPE                        TunnelType;
  SOCKET_ADDRESS                     Dhcpv6Server;
  BYTE                               Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
  ULONG                              Dhcpv6ClientDuidLength;
  ULONG                              Dhcpv6Iaid;
  PIP_ADAPTER_DNS_SUFFIX             FirstDnsSuffix;
} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;

Membres

Alignment

Type : ULONGLONG

Réservé. Utilisé par le compilateur pour aligner la structure.

Length

Type : ULONG

Longueur, en octets, de cette structure. Notez que la longueur de la structure IP_ADAPTER_ADDRESSES a changé sur Windows XP avec SP1 et versions ultérieures, ainsi que sur Windows Vista et versions ultérieures.

IfIndex

Type : DWORD

Index de l’interface IPv4 à laquelle ces adresses sont associées. Sur Windows Server 2003 et Windows XP, ce membre est égal à zéro si IPv4 n’est pas disponible sur l’interface.

Next

Type : struct _IP_ADAPTER_ADDRESSES*

Pointeur vers la structure de l’adaptateur suivant dans la liste.

AdapterName

Type : PCHAR

Tableau de caractères qui contient le nom de l’adaptateur auquel ces adresses sont associées. Contrairement au nom convivial d’un adaptateur, le nom de l’adaptateur spécifié dans AdapterName est permanent et ne peut pas être modifié par l’utilisateur.

FirstUnicastAddress

Type : PIP_ADAPTER_UNICAST_ADDRESS

Pointeur vers la première structure IP_ADAPTER_UNICAST_ADDRESS dans une liste liée d’adresses IP unicast pour l’adaptateur.

FirstAnycastAddress

Type : PIP_ADAPTER_ANYCAST_ADDRESS

Pointeur vers la première structure IP_ADAPTER_ANYCAST_ADDRESS dans une liste liée d’adresses IP anycast pour l’adaptateur.

FirstMulticastAddress

Type : PIP_ADAPTER_MULTICAST_ADDRESS

Pointeur vers la première structure IP_ADAPTER_MULTICAST_ADDRESS dans une liste d’adresses de multidiffusion IP pour l’adaptateur.

FirstDnsServerAddress

Type : PIP_ADAPTER_DNS_SERVER_ADDRESS

Pointeur vers la première structure IP_ADAPTER_DNS_SERVER_ADDRESS dans une liste liée d’adresses de serveur DNS pour l’adaptateur.

DnsSuffix

Type : PWCHAR

Suffixe DNS (Domain Name System) associé à cet adaptateur.

Description

Type : PWCHAR

Description de l’adaptateur. Ce membre est en lecture seule.

FriendlyName

Type : PWCHAR

Nom convivial de l’adaptateur. Par exemple : « Connexion à la zone locale 1 ». Ce nom apparaît dans des contextes tels que le programme de ligne de commande ipconfig et le dossier Connexion. Ce membre est en lecture seule et ne peut pas être modifié à l’aide des fonctions d’assistance IP.

Ce membre est le champ ifAlias utilisé par NDIS, comme décrit dans RFC 2863. Le champ ifAlias peut être défini par un fournisseur d’interface NDIS lorsque le pilote NDIS est installé. Pour les pilotes miniportS NDIS, ce champ est défini par NDIS.

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

Type : BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

Adresse media Access Control (MAC) de l’adaptateur. Par exemple, sur un réseau Ethernet, ce membre spécifie l’adresse matérielle Ethernet.

PhysicalAddressLength

Type : DWORD

Longueur, en octets, de l’adresse spécifiée dans le membre PhysicalAddress . Pour les interfaces qui n’ont pas de couche de liaison de données, cette valeur est égale à zéro.

Flags

Type : DWORD

Ensemble d’indicateurs spécifiant différents paramètres pour l’adaptateur. Ces valeurs sont définies dans le fichier d’en-tête Iptypes.h . Des combinaisons de ces bits d’indicateur sont possibles.

Indicateur Signification
IP_ADAPTER_DDNS_ENABLED
0x0001
Le DNS dynamique est activé sur cet adaptateur.
IP_ADAPTER_REGISTER_ADAPTER_SUFFIX
0x0002
Inscrivez le suffixe DNS pour cette carte.
IP_ADAPTER_DHCP_ENABLED
0x0004
Le protocole DHCP (Dynamic Host Configuration Protocol) est activé sur cet adaptateur.
IP_ADAPTER_RECEIVE_ONLY
0x0008
L’adaptateur est un adaptateur de réception uniquement.
IP_ADAPTER_NO_MULTICAST
0x0010
L’adaptateur n’est pas un destinataire de multidiffusion.
IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG
0x0020
L’adaptateur contient d’autres informations de configuration avec état spécifiques à IPv6.
IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED
0x0040
L’adaptateur est activé pour NetBIOS via TCP/IP.
Note Cet indicateur est uniquement pris en charge sur Windows Vista et versions ultérieures lorsque l’application a été compilée pour une plateforme cible avec une version NTDDI égale ou supérieure à NTDDI_LONGHORN. Cet indicateur est défini dans la structure IP_ADAPTER_ADDRESSES_LH en tant que champ de bits NetbiosOverTcpipEnabled .
 
IP_ADAPTER_IPV4_ENABLED
0x0080
L’adaptateur est activé pour IPv4.
Note Cet indicateur est uniquement pris en charge sur Windows Vista et versions ultérieures lorsque l’application a été compilée pour une plateforme cible avec une version NTDDI égale ou supérieure à NTDDI_LONGHORN. Cet indicateur est défini dans la structure IP_ADAPTER_ADDRESSES_LH en tant que champ de bits Ipv4Enabled .
 
IP_ADAPTER_IPV6_ENABLED
0x0100
L’adaptateur est activé pour IPv6.
Note Cet indicateur est uniquement pris en charge sur Windows Vista et versions ultérieures lorsque l’application a été compilée pour une plateforme cible avec une version NTDDI égale ou supérieure à NTDDI_LONGHORN. Cet indicateur est défini dans la structure IP_ADAPTER_ADDRESSES_LH en tant que champ de bits Ipv6Enabled .
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
L’adaptateur est activé pour la configuration de l’adresse managée IPv6.
Note Cet indicateur est uniquement pris en charge sur Windows Vista et versions ultérieures lorsque l’application a été compilée pour une plateforme cible avec une version NTDDI égale ou supérieure à NTDDI_LONGHORN. Cet indicateur est défini dans la structure IP_ADAPTER_ADDRESSES_LH en tant que champ de bits Ipv6ManagedAddressConfigurationSupported .
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

Type : DWORD

Taille maximale de l’unité de transmission (MTU), en octets.

IfType

Type : DWORD

Type d’interface tel que défini par l’autorité IANA (Internet Assigned Names Authority). Les valeurs possibles pour le type d’interface 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’interface, bien que de nombreuses autres valeurs soient possibles.

Valeur Signification
IF_TYPE_OTHER
1
Un autre type d’interface réseau.
IF_TYPE_ETHERNET_CSMACD
6
Une interface réseau Ethernet.
IF_TYPE_ISO88025_TOKENRING
9
Interface réseau en anneau de jeton.
IF_TYPE_PPP
23
Interface réseau PPP.
IF_TYPE_SOFTWARE_LOOPBACK
24
Interface réseau de bouclage logiciel.
IF_TYPE_ATM
37
Une interface réseau ATM.
IF_TYPE_IEEE80211
71
Interface réseau sans fil IEEE 802.11.

Sur Windows Vista et versions ultérieures, les cartes réseau sans fil sont signalées comme IF_TYPE_IEEE80211. Dans les versions antérieures de Windows, les cartes réseau sans fil sont signalées comme IF_TYPE_ETHERNET_CSMACD.

Sur Windows XP avec SP3 et sur Windows XP avec SP2 x86 avec l’API LAN sans fil pour Windows XP avec SP2 installé, la fonction WlanEnumInterfaces peut être utilisée pour énumérer les interfaces sans fil sur l’ordinateur local.

IF_TYPE_TUNNEL
131
Interface réseau d’encapsulation de type tunnel.
IF_TYPE_IEEE1394
144
Une interface réseau de bus série IEEE 1394 (Firewire) hautes performances.

OperStatus

Type : IF_OPER_STATUS

La status opérationnelle pour l’interface telle que définie dans RFC 2863. Pour plus d’informations, consultez http://www.ietf.org/rfc/rfc2863.txt. Ce membre peut être l’une des valeurs du type d’énumération IF_OPER_STATUS défini dans le fichier d’en-tête Iftypes.h . Sur Windows Vista et versions ultérieures, les fichiers d’en-tête ont été réorganisés et cette énumération est définie dans le fichier d’en-tête Ifdef.h .

Valeur Signification
IfOperStatusUp
1
L’interface est en place et peut transmettre des paquets.
IfOperStatusDown
2
L’interface est en panne et n’est pas en état de transmettre des paquets. L’état IfOperStatusDown a deux significations, en fonction de la valeur du membre AdminStatus . Si AdminStatus n’est pas défini sur NET_IF_ADMIN_STATUS_DOWN et siOperStatus est défini sur IfOperStatusDown , une condition d’erreur est supposée exister sur l’interface. Si AdminStatus est défini sur IfOperStatusDown, ifOperStatus est normalement également défini sur IfOperStatusDown ou IfOperStatusNotPresent et il n’y a pas nécessairement de condition d’erreur sur l’interface.
IfOperStatusTesting
3
L’interface est en mode test.
IfOperStatusUnknown
4
La status opérationnelle de l’interface est inconnue.
IfOperStatusDormant
5
L’interface n’est pas réellement en état de transmettre des paquets (elle n’est pas active), mais elle est dans un état en attente, en attente d’un événement externe. Pour les interfaces à la demande, ce nouvel état identifie la situation dans laquelle l’interface attend que des événements la placent dans l’état IfOperStatusUp .
IfOperStatusNotPresent
6
Affinement sur l’état IfOperStatusDown qui indique que l’interface appropriée est en panne spécifiquement parce qu’un composant (généralement, un composant matériel) n’est pas présent dans le système managé.
IfOperStatusLowerLayerDown
7
Affinement sur l’état IfOperStatusDown . Ce nouvel état indique que cette interface s’exécute par-dessus une ou plusieurs autres interfaces et que cette interface est en panne spécifiquement parce qu’une ou plusieurs de ces interfaces de couche inférieure sont en panne.

Ipv6IfIndex

Type : DWORD

Index d’interface de l’adresse IP IPv6. Ce membre est égal à zéro si IPv6 n’est pas disponible sur l’interface.

Note Ce membre de structure est disponible uniquement sur Windows XP avec SP1 et versions ultérieures.
 

ZoneIndices[16]

Type : DWORD[16]

Tableau d’ID d’étendue pour chaque niveau d’étendue utilisé pour composer des structures sockaddr . L’énumération SCOPE_LEVEL est utilisée pour indexer le tableau. Sur IPv6, plusieurs adresses de multidiffusion IPv6 peuvent être affectées à une seule interface en fonction d’un ID d’étendue.

Note Ce membre de structure est disponible uniquement sur Windows XP avec SP1 et versions ultérieures.
 

FirstPrefix

Type : PIP_ADAPTER_PREFIX

Pointeur vers la première structure IP_ADAPTER_PREFIX dans une liste liée de préfixes d’adaptateur IP pour l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows XP avec SP1 et versions ultérieures.
 

TransmitLinkSpeed

Type : ULONG64

Vitesse actuelle en bits par seconde du lien de transmission de l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

ReceiveLinkSpeed

Type : ULONG64

Vitesse actuelle en bits par seconde du lien de réception de l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

FirstWinsServerAddress

Type : PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

Pointeur vers la première structure IP_ADAPTER_WINS_SERVER_ADDRESS dans une liste liée d’adresses de serveur Wins (Windows Internet Name Service) pour l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

FirstGatewayAddress

Type : PIP_ADAPTER_GATEWAY_ADDRESS_LH

Pointeur vers la première structure IP_ADAPTER_GATEWAY_ADDRESS dans une liste liée de passerelles pour l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Ipv4Metric

Type : ULONG

Métrique de l’interface IPv4 pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv4.

La métrique d’itinéraire réelle utilisée pour calculer les préférences d’itinéraire pour IPv4 est la somme du décalage de la métrique d’itinéraire spécifié dans le membre de métrique de la structure MIB_IPFORWARD_ROW2 et de la métrique d’interface spécifiée dans ce membre pour IPv4.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Ipv6Metric

Type : ULONG

Métrique de l’interface IPv6 pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6.

La métrique d’itinéraire réelle utilisée pour calculer les préférences d’itinéraire pour IPv6 est la somme du décalage de la métrique d’itinéraire spécifié dans le membre de métrique de la structure MIB_IPFORWARD_ROW2 et de la métrique d’interface spécifiée dans ce membre pour IPv4.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Luid

Type : IF_LUID

LUID de l’interface pour l’adresse de l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Dhcpv4Server

Type : SOCKET_ADDRESS

Adresse IPv4 du serveur DHCP pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv4 configurée à l’aide du protocole DHCP.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

CompartmentId

Type : NET_IF_COMPARTMENT_ID

ID du compartiment de routage pour l’adresse de l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures. Ce membre n’est actuellement pas pris en charge et est réservé pour une utilisation ultérieure.
 

NetworkGuid

Type : NET_IF_NETWORK_GUID

GUID associé au réseau auquel appartient l’interface.

Si le fournisseur d’interface ne peut pas fournir le GUID réseau, ce membre peut être un GUID zéro. Dans ce cas, l’interface a été inscrite par NDIS dans le réseau par défaut.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

ConnectionType

Type : NET_IF_CONNECTION_TYPE

Type de connexion d’interface pour l’adresse de l’adaptateur.

Ce membre peut être l’une des valeurs du type d’énumération NET_IF_CONNECTION_TYPE défini dans le fichier d’en-tête Ifdef.h .

Valeur Signification
NET_IF_CONNECTION_DEDICATED
1
Le type de connexion est dédié. La connexion s’affiche automatiquement lorsque l’sens multimédia a la valeur TRUE. Par exemple, une connexion Ethernet est dédiée.
NET_IF_CONNECTION_PASSIVE
2
Le type de connexion est passif. L’extrémité distante doit afficher la connexion à la station locale. Par exemple, une interface RAS est passive.
NET_IF_CONNECTION_DEMAND
3
Le type de connexion est à la demande. Une connexion de ce type se produit en réponse à une action locale (envoi d’un paquet, par exemple).
NET_IF_CONNECTION_MAXIMUM
4
Valeur maximale possible pour le type d’énumération NET_IF_CONNECTION_TYPE . Il ne s’agit pas d’une valeur légale pour le membre ConnectionType .
 
Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

TunnelType

Type : TUNNEL_TYPE

Méthode d’encapsulation utilisée par un tunnel si l’adresse de l’adaptateur est un tunnel.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 
Le type de tunnel est défini par l’IANA (Internet Assigned Names Authority). Pour plus d’informations, consultez http://www.iana.org/assignments/ianaiftype-mib. Ce membre peut être l’une des valeurs du type d’énumération TUNNEL_TYPE défini dans le fichier d’en-tête Ifdef.h .
Valeur Signification
TUNNEL_TYPE_NONE
0
Pas un tunnel.
TUNNEL_TYPE_OTHER
1
Aucun des types de tunnel suivants.
TUNNEL_TYPE_DIRECT
2
Un paquet est encapsulé directement dans un en-tête IP normal, sans en-tête intermédiaire, et la monodiffusion vers le point de terminaison de tunnel distant.
TUNNEL_TYPE_6TO4
11
Un paquet IPv6 est encapsulé directement dans un en-tête IPv4, sans en-tête intermédiaire, et la monodiffusion vers la destination déterminée par le protocole 6to4.
TUNNEL_TYPE_ISATAP
13
Un paquet IPv6 est encapsulé directement dans un en-tête IPv4, sans en-tête intermédiaire, et la monodiffusion vers la destination déterminée par le protocole ISATAP.
TUNNEL_TYPE_TEREDO
14
Encapsulation Teredo pour les paquets IPv6.
TUNNEL_TYPE_IPHTTPS
15
Encapsulation IP sur HTTPS pour les paquets IPv6.
Note Cette valeur d’énumération est disponible uniquement sur Windows 7, Windows Server 2008 R2 et versions ultérieures.
 

Dhcpv6Server

Type : SOCKET_ADDRESS

Adresse IPv6 du serveur DHCPv6 pour l’adresse de l’adaptateur. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6. Ce membre de structure n’est actuellement pas pris en charge et est réservé pour une utilisation ultérieure.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

Type : BYTE[MAX_DHCPV6_DUID_LENGTH]

Identificateur unique DHCP (DUID) pour le client DHCPv6. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Dhcpv6ClientDuidLength

Type : ULONG

Longueur, en octets, de l’identificateur unique DHCP (DUID) pour le client DHCPv6. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

Dhcpv6Iaid

Type : ULONG

Identificateur d’une association d’identité choisie par le client DHCPv6. Ce membre s’applique uniquement à une adresse d’adaptateur IPv6 configurée à l’aide de DHCPv6.

Note Ce membre de structure est disponible uniquement sur Windows Vista et versions ultérieures.
 

FirstDnsSuffix

Type : PIP_ADAPTER_DNS_SUFFIX

Pointeur vers la première structure IP_ADAPTER_DNS_SUFFIX dans une liste liée de suffixes DNS pour l’adaptateur.

Note Ce membre de structure est disponible uniquement sur Windows Vista avec SP1et versions ultérieures et sur Windows Server 2008 et versions ultérieures.
 

Notes

La fonction GetAdaptersAddresses récupère des informations pour les adresses IPv4 et IPv6 et retourne ces informations sous la forme d’une liste liée de structures IP_ADAPTER_ADDRESSES

Les valeurs d’index de l’adaptateur spécifiées dans les membres IfIndex et Ipv6IfIndex peuvent changer lorsqu’un adaptateur est désactivé, puis activé, ou dans d’autres circonstances, et ne doivent pas être considérés comme persistants.

Les valeurs du membre IfType sont définies dans le fichier d’en-tête Ipifcons.h . Seules les valeurs possibles répertoriées dans la description du membre IfType sont actuellement prises en charge.

La taille de la structure IP_ADAPTER_ADDRESSES a changé sur Windows XP avec SP1 et versions ultérieures. La taille de la structure IP_ADAPTER_ADDRESSES a également changé sur Windows Vista et versions ultérieures. La taille de la structure IP_ADAPTER_ADDRESSES a également changé sur Windows Vista avec SP1et versions ultérieures et sur Windows Server 2008 et versions ultérieures. Le membre Length doit être utilisé pour déterminer quelle version de la structure IP_ADAPTER_ADDRESSES est utilisée.

La version de la structure IP_ADAPTER_ADDRESSES sur Windows XP avec SP1 et versions ultérieures a été ajoutée aux nouveaux membres suivants : Ipv6IfIndex, ZoneIndices et FirstPrefix.

La version de la structure IP_ADAPTER_ADDRESSES sur Windows Vista et ultérieur a été ajoutée aux nouveaux membres suivants : TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength et Dhcpv6Iaid.

La version de la structure IP_ADAPTER_ADDRESSES sur Windows Vista avec SP1et versions ultérieures et sur Windows Server 2008 et versions ultérieures a ajouté le nouveau membre suivant : FirstDnsSuffix.

Les membres Ipv4Metric et Ipv6Metric sont utilisés pour hiérarchiser les métriques de routage pour les itinéraires connectés à plusieurs interfaces sur l’ordinateur local.

L’ordre des structures de IP_ADAPTER_UNICAST_ADDRESS liées pointées par le membre FirstUnicastAddress retournés par la fonction GetAdaptersAddresses ne reflète pas l’ordre dans lequel les adresses IP ont été ajoutées à un adaptateur et peut varier d’une version de Windows à l’autre. De même, l’ordre des structures de IP_ADAPTER_ANYCAST_ADDRESS liées pointées par le membre FirstAnycastAddress et l’ordre des structures de IP_ADAPTER_MULTICAST_ADDRESS liées pointées par le membre FirstMulticastAddress ne reflètent pas l’ordre dans lequel les adresses IP ont été ajoutées à un adaptateur et peuvent varier d’une version de Windows à l’autre.

En outre, les structures de IP_ADAPTER_UNICAST_ADDRESS liées pointées par le membre FirstUnicastAddress et les structures IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix sont conservées en tant que listes liées internes distinctes par le système d’exploitation. Par conséquent, l’ordre des structures de IP_ADAPTER_UNICAST_ADDRESS liées pointées par le membre FirstUnicastAddress n’a aucune relation avec l’ordre des structures IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix .

Sur Windows Vista et versions ultérieures, les structures IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix incluent trois préfixes de carte IP pour chaque adresse IP affectée à la carte. Il s’agit notamment du préfixe d’adresse IP de l’hôte, du préfixe d’adresse IP du sous-réseau et du préfixe d’adresse IP de diffusion du sous-réseau. En outre, pour chaque adaptateur, il existe un préfixe d’adresse de multidiffusion et un préfixe d’adresse de diffusion.

Sur Windows XP avec SP1 et versions ultérieures antérieures à Windows Vista, les structures de IP_ADAPTER_PREFIX liées pointées par le membre FirstPrefix n’incluent qu’un seul préfixe de carte IP pour chaque adresse IP affectée à la carte.

Dans le Kit de développement logiciel (SDK) Windows, la version de la structure à utiliser sur Windows Vista et versions ultérieures est définie comme IP_ADAPTER_ADDRESSES_LH. Dans le Kit de développement logiciel (SDK) Microsoft Windows, la version de cette structure à utiliser sur des systèmes antérieurs, y compris Windows XP avec SP1 et versions ultérieures, est définie comme IP_ADAPTER_ADDRESSES_XP. Lors de la compilation d’une application si la plateforme cible est Windows Vista et versions ultérieures (NTDDI_VERSION >= NTDDI_LONGHORN, _WIN32_WINNT >= 0x0600, ou WINVER >= 0x0600), la structure IP_ADAPTER_ADDRESSES_LH est typée à la structure IP_ADAPTER_ADDRESSES . Lors de la compilation d’une application si la plateforme cible n’est pas Windows Vista et versions ultérieures, la structure IP_ADAPTER_ADDRESSES_XP est typée à la structure IP_ADAPTER_ADDRESSES .

La structure SOCKET_ADDRESS est utilisée dans la structure IP_ADAPTER_ADDRESSES . Sur le Kit de développement logiciel (SDK) Windows publié pour Windows Vista et versions ultérieures, la organization des fichiers d’en-tête a changé et la structure SOCKET_ADDRESS est définie dans le fichier d’en-tête Ws2def.h qui est automatiquement inclus par le fichier d’en-tête Winsock2.h. Dans le Kit de développement logiciel (SDK) de plateforme publié pour Windows Server 2003 et Windows XP, la structure SOCKET_ADDRESS est déclarée dans le fichier d’en-tête Winsock2.h . Pour utiliser la structure IP_ADAPTER_ADDRESSES , le fichier d’en-tête Winsock2.h doit être inclus avant le fichier d’en-tête Iphlpapi.h .

Exemples

Cet exemple récupère la structure IP_ADAPTER_ADDRESSES pour les adaptateurs associés au système et imprime certains membres pour chaque interface d’adaptateur.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.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(int argc, char **argv)
{

    /* Declare and initialize variables */

    DWORD dwSize = 0;
    DWORD dwRetVal = 0;

    unsigned int i = 0;

    // Set the flags to pass to GetAdaptersAddresses
    ULONG flags = GAA_FLAG_INCLUDE_PREFIX;

    // default to unspecified address family (both)
    ULONG family = AF_UNSPEC;

    LPVOID lpMsgBuf = NULL;

    PIP_ADAPTER_ADDRESSES pAddresses = NULL;
    ULONG outBufLen = 0;

    PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
    PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
    PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
    PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
    IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
    IP_ADAPTER_PREFIX *pPrefix = NULL;

    if (argc != 2) {
        printf(" Usage: getadapteraddresses family\n");
        printf("        getadapteraddresses 4 (for IPv4)\n");
        printf("        getadapteraddresses 6 (for IPv6)\n");
        printf("        getadapteraddresses A (for both IPv4 and IPv6)\n");
        exit(1);
    }

    if (atoi(argv[1]) == 4)
        family = AF_INET;
    else if (atoi(argv[1]) == 6)
        family = AF_INET6;

    outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
    pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);

    // Make an initial call to GetAdaptersAddresses to get the 
    // size needed into the outBufLen variable
    if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen)
        == ERROR_BUFFER_OVERFLOW) {
        FREE(pAddresses);
        pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
    }

    if (pAddresses == NULL) {
        printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");
        exit(1);
    }
    // Make a second call to GetAdaptersAddresses to get the
    // actual data we want
    printf("Memory allocated for GetAdapterAddresses = %d bytes\n", outBufLen);
    printf("Calling GetAdaptersAddresses function with family = ");
    if (family == AF_INET)
        printf("AF_INET\n");
    if (family == AF_INET6)
        printf("AF_INET6\n");
    if (family == AF_UNSPEC)
        printf("AF_UNSPEC\n\n");

    dwRetVal =
        GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);

    if (dwRetVal == NO_ERROR) {
        // If successful, output some information from the data we received
        pCurrAddresses = pAddresses;
        while (pCurrAddresses) {
            printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",
                   pCurrAddresses->Length);
            printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);
            printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);

            pUnicast = pCurrAddresses->FirstUnicastAddress;
            if (pUnicast != NULL) {
                for (i = 0; pUnicast != NULL; i++)
                    pUnicast = pUnicast->Next;
                printf("\tNumber of Unicast Addresses: %d\n", i);
            } else
                printf("\tNo Unicast Addresses\n");

            pAnycast = pCurrAddresses->FirstAnycastAddress;
            if (pAnycast) {
                for (i = 0; pAnycast != NULL; i++)
                    pAnycast = pAnycast->Next;
                printf("\tNumber of Anycast Addresses: %d\n", i);
            } else
                printf("\tNo Anycast Addresses\n");

            pMulticast = pCurrAddresses->FirstMulticastAddress;
            if (pMulticast) {
                for (i = 0; pMulticast != NULL; i++)
                    pMulticast = pMulticast->Next;
                printf("\tNumber of Multicast Addresses: %d\n", i);
            } else
                printf("\tNo Multicast Addresses\n");

            pDnServer = pCurrAddresses->FirstDnsServerAddress;
            if (pDnServer) {
                for (i = 0; pDnServer != NULL; i++)
                    pDnServer = pDnServer->Next;
                printf("\tNumber of DNS Server Addresses: %d\n", i);
            } else
                printf("\tNo DNS Server Addresses\n");

            printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);
            printf("\tDescription: %wS\n", pCurrAddresses->Description);
            printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);

            if (pCurrAddresses->PhysicalAddressLength != 0) {
                printf("\tPhysical address: ");
                for (i = 0; i < pCurrAddresses->PhysicalAddressLength;
                     i++) {
                    if (i == (pCurrAddresses->PhysicalAddressLength - 1))
                        printf("%.2X\n",
                               (int) pCurrAddresses->PhysicalAddress[i]);
                    else
                        printf("%.2X-",
                               (int) pCurrAddresses->PhysicalAddress[i]);
                }
            }
            printf("\tFlags: %ld\n", pCurrAddresses->Flags);
            printf("\tMtu: %lu\n", pCurrAddresses->Mtu);
            printf("\tIfType: %ld\n", pCurrAddresses->IfType);
            printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);
            printf("\tIpv6IfIndex (IPv6 interface): %u\n",
                   pCurrAddresses->Ipv6IfIndex);
            printf("\tZoneIndices (hex): ");
            for (i = 0; i < 16; i++)
                printf("%lx ", pCurrAddresses->ZoneIndices[i]);
            printf("\n");

            pPrefix = pCurrAddresses->FirstPrefix;
            if (pPrefix) {
                for (i = 0; pPrefix != NULL; i++)
                    pPrefix = pPrefix->Next;
                printf("\tNumber of IP Adapter Prefix entries: %d\n", i);
            } else
                printf("\tNo IP Adapter Prefix entries\n");

            printf("\n");

            pCurrAddresses = pCurrAddresses->Next;
        }
    } else {
        printf("Call to GetAdaptersAddresses failed with error: %d\n",
               dwRetVal);
        if (dwRetVal == ERROR_NO_DATA)
            printf("\tNo addresses were found for the requested parameters\n");
        else {

            if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   // Default language
                              (LPTSTR) & lpMsgBuf, 0, NULL)) {
                printf("\tError: %s", lpMsgBuf);
                LocalFree(lpMsgBuf);
                FREE(pAddresses);
                exit(1);
            }
        }
    }
    FREE(pAddresses);
    return 0;
}

Spécifications

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête iptypes.h (include Iphlpapi.h)

Voir aussi

GetAdaptersAddresses

IF_OPER_STATUS

Page de démarrage de l’assistance IP

Structures d’assistance IP

IP_ADAPTER_ANYCAST_ADDRESS

IP_ADAPTER_DNS_SERVER_ADDRESS

IP_ADAPTER_DNS_SUFFIX

IP_ADAPTER_GATEWAY_ADDRESS

IP_ADAPTER_MULTICAST_ADDRESS

IP_ADAPTER_PREFIX

IP_ADAPTER_UNICAST_ADDRESS

IP_ADAPTER_WINS_SERVER_ADDRESS

SCOPE_LEVEL

SOCKET_ADDRESS

sockaddr