estructura IP_ADAPTER_ADDRESSES_LH (iptypes.h)

La estructura IP_ADAPTER_ADDRESSES es el nodo de encabezado de una lista vinculada de direcciones para un adaptador determinado. Esta estructura se puede usar simultáneamente como parte de una lista vinculada de estructuras de IP_ADAPTER_ADDRESSES .

Sintaxis

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;

Members

Alignment

Tipo: ULONGLONG

Reservado. Usado por el compilador para alinear la estructura.

Length

Tipo: ULONG

Longitud, en bytes, de esta estructura. Tenga en cuenta que la longitud de la estructura de IP_ADAPTER_ADDRESSES cambió en Windows XP con SP1 y versiones posteriores y también en Windows Vista y versiones posteriores.

IfIndex

Tipo: DWORD

Índice de la interfaz IPv4 con la que están asociadas estas direcciones. En Windows Server 2003 y Windows XP, este miembro es cero si IPv4 no está disponible en la interfaz.

Next

Tipo: struct _IP_ADAPTER_ADDRESSES*

Puntero a la siguiente estructura de direcciones del adaptador de la lista.

AdapterName

Tipo: PCHAR

Matriz de caracteres que contiene el nombre del adaptador con el que están asociadas estas direcciones. A diferencia del nombre descriptivo de un adaptador, el nombre del adaptador especificado en AdapterName es permanente y el usuario no puede modificarlo.

FirstUnicastAddress

Tipo: PIP_ADAPTER_UNICAST_ADDRESS

Puntero a la primera estructura IP_ADAPTER_UNICAST_ADDRESS en una lista vinculada de direcciones de unidifusión IP para el adaptador.

FirstAnycastAddress

Tipo: PIP_ADAPTER_ANYCAST_ADDRESS

Puntero a la primera estructura IP_ADAPTER_ANYCAST_ADDRESS en una lista vinculada de direcciones de difusión IP para el adaptador.

FirstMulticastAddress

Tipo: PIP_ADAPTER_MULTICAST_ADDRESS

Puntero a la primera estructura IP_ADAPTER_MULTICAST_ADDRESS en una lista de direcciones de multidifusión IP para el adaptador.

FirstDnsServerAddress

Tipo: PIP_ADAPTER_DNS_SERVER_ADDRESS

Puntero a la primera estructura de IP_ADAPTER_DNS_SERVER_ADDRESS en una lista vinculada de direcciones de servidor DNS para el adaptador.

DnsSuffix

Tipo: PWCHAR

Sufijo sistema de nombres de dominio (DNS) asociado a este adaptador.

Description

Tipo: PWCHAR

Descripción del adaptador. Este miembro es de solo lectura.

FriendlyName

Tipo: PWCHAR

Un nombre descriptivo para el adaptador. Por ejemplo: "Conexión de área local 1". Este nombre aparece en contextos como el programa de línea de comandos ipconfig y la carpeta Connection. Este miembro es de solo lectura y no se puede modificar mediante ninguna función auxiliar de IP.

Este miembro es el campo ifAlias utilizado por NDIS como se describe en RFC 2863. El campo ifAlias se puede establecer mediante un proveedor de interfaz NDIS cuando se instala el controlador NDIS. Para los controladores de minipuerto de NDIS, este campo se establece mediante NDIS.

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

Dirección Access Control multimedia (MAC) del adaptador. Por ejemplo, en una red Ethernet, este miembro especificaría la dirección de hardware Ethernet.

PhysicalAddressLength

Tipo: DWORD

Longitud, en bytes, de la dirección especificada en el miembro PhysicalAddress . En el caso de las interfaces que no tienen una capa de vínculo de datos, este valor es cero.

Flags

Tipo: DWORD

Conjunto de marcas que especifican varias opciones de configuración para el adaptador. Estos valores se definen en el archivo de encabezado Iptypes.h . Las combinaciones de estos bits de marca son posibles.

Marca Significado
IP_ADAPTER_DDNS_ENABLED
0x0001
DNS dinámico está habilitado en este adaptador.
IP_ADAPTER_REGISTER_ADAPTER_SUFFIX
0x0002
Registre el sufijo DNS para este adaptador.
IP_ADAPTER_DHCP_ENABLED
0x0004
El Protocolo de configuración dinámica de host (DHCP) está habilitado en este adaptador.
IP_ADAPTER_RECEIVE_ONLY
0x0008
El adaptador es un adaptador de solo recepción.
IP_ADAPTER_NO_MULTICAST
0x0010
El adaptador no es un destinatario de multidifusión.
IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG
0x0020
El adaptador contiene otra información de configuración con estado específica de IPv6.
IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED
0x0040
El adaptador está habilitado para NetBIOS a través de TCP/IP.
Nota Esta marca solo se admite en Windows Vista y versiones posteriores cuando la aplicación se ha compilado para una plataforma de destino con una versión NTDDI igual o mayor que NTDDI_LONGHORN. Esta marca se define en la estructura IP_ADAPTER_ADDRESSES_LH como el campo de bits NetbiosOverTcpipEnabled .
 
IP_ADAPTER_IPV4_ENABLED
0x0080
El adaptador está habilitado para IPv4.
Nota Esta marca solo se admite en Windows Vista y versiones posteriores cuando la aplicación se ha compilado para una plataforma de destino con una versión NTDDI igual o mayor que NTDDI_LONGHORN. Esta marca se define en la estructura IP_ADAPTER_ADDRESSES_LH como campo de bits Ipv4Enabled .
 
IP_ADAPTER_IPV6_ENABLED
0x0100
El adaptador está habilitado para IPv6.
Nota Esta marca solo se admite en Windows Vista y versiones posteriores cuando la aplicación se ha compilado para una plataforma de destino con una versión NTDDI igual o mayor que NTDDI_LONGHORN. Esta marca se define en la estructura IP_ADAPTER_ADDRESSES_LH como campo de bits Ipv6Enabled .
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
El adaptador está habilitado para la configuración de direcciones administradas IPv6.
Nota Esta marca solo se admite en Windows Vista y versiones posteriores cuando la aplicación se ha compilado para una plataforma de destino con una versión NTDDI igual o mayor que NTDDI_LONGHORN. Esta marca se define en la estructura IP_ADAPTER_ADDRESSES_LH como campo de bits Ipv6ManagedAddressConfigurationSupported .
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

Tipo: DWORD

Tamaño máximo de la unidad de transmisión (MTU), en bytes.

IfType

Tipo: DWORD

Tipo de interfaz definido por la Autoridad de nombres asignados a Internet (IANA). Los valores posibles para el tipo de interfaz se enumeran en el archivo de encabezado Ipifcons.h .

En la tabla siguiente se enumeran los valores comunes para el tipo de interfaz, aunque muchos otros valores son posibles.

Valor Significado
IF_TYPE_OTHER
1
Otro tipo de interfaz de red.
IF_TYPE_ETHERNET_CSMACD
6
Una interfaz de red Ethernet.
IF_TYPE_ISO88025_TOKENRING
9
Interfaz de red de anillo de token.
IF_TYPE_PPP
23
Una interfaz de red PPP.
IF_TYPE_SOFTWARE_LOOPBACK
24
Interfaz de red de bucle invertido de software.
IF_TYPE_ATM
37
Una interfaz de red ATM.
IF_TYPE_IEEE80211
71
Interfaz de red inalámbrica IEEE 802.11.

En Windows Vista y versiones posteriores, las tarjetas de red inalámbricas se notifican como IF_TYPE_IEEE80211. En versiones anteriores de Windows, las tarjetas de red inalámbricas se notifican como IF_TYPE_ETHERNET_CSMACD.

En Windows XP con SP3 y en Windows XP con SP2 x86 con la API de LAN inalámbrica para Windows XP con SP2 instalado, la función WlanEnumInterfaces se puede usar para enumerar interfaces inalámbricas en el equipo local.

IF_TYPE_TUNNEL
131
Interfaz de red de encapsulación de tipos de túnel.
IF_TYPE_IEEE1394
144
Interfaz de red de bus serie de alto rendimiento IEEE 1394 (Firewire).

OperStatus

Tipo: IF_OPER_STATUS

Estado operativo de la interfaz tal como se define en RFC 2863. Para más información, consulte http://www.ietf.org/rfc/rfc2863.txt. Este miembro puede ser uno de los valores del tipo de enumeración IF_OPER_STATUS definido en el archivo de encabezado Iftypes.h . En Windows Vista y versiones posteriores, los archivos de encabezado se reorganizaron y esta enumeración se define en el archivo de encabezado Ifdef.h .

Valor Significado
IfOperStatusUp
1
La interfaz está actualizada y capaz de pasar paquetes.
IfOperStatusDown
2
La interfaz está inactiva y no en una condición para pasar paquetes. El estado IfOperStatusDown tiene dos significados, según el valor del miembro AdminStatus . Si AdminStatus no está establecido en NET_IF_ADMIN_STATUS_DOWN y ifOperStatus se establece en IfOperStatusDown , se supone que existe una condición de error en la interfaz. Si AdminStatus se establece en IfOperStatusDown, ifOperStatus normalmente también se establecerá en IfOperStatusDown o IfOperStatusNotPresent y no necesariamente hay una condición de error en la interfaz.
IfOperStatusTesting
3
La interfaz está en modo de prueba.
IfOperStatusUnknown
4
El estado operativo de la interfaz es desconocido.
IfOperStatusDormant
5
La interfaz no está realmente en una condición para pasar paquetes (no está activo), pero está en un estado pendiente, esperando algún evento externo. En el caso de las interfaces a petición, este nuevo estado identifica la situación en la que la interfaz está esperando a que los eventos lo coloquen en el estado IfOperStatusUp .
IfOperStatusNotPresent
6
Un refinamiento en el estado IfOperStatusDown que indica que la interfaz pertinente está inactiva específicamente porque algún componente (normalmente, un componente de hardware) no está presente en el sistema administrado.
IfOperStatusLowerLayerDown
7
Refinamiento en el estado IfOperStatusDown . Este nuevo estado indica que esta interfaz se ejecuta encima de una o varias interfaces y que esta interfaz está inactiva específicamente porque una o varias de estas interfaces de capa inferior están inactivas.

Ipv6IfIndex

Tipo: DWORD

Índice de interfaz de la dirección IP IPv6. Este miembro es cero si IPv6 no está disponible en la interfaz.

Nota Este miembro de estructura solo está disponible en Windows XP con SP1 y versiones posteriores.
 

ZoneIndices[16]

Tipo: DWORD[16]

Matriz de identificadores de ámbito para cada nivel de ámbito que se usa para componer estructuras sockaddr . La enumeración SCOPE_LEVEL se usa para indexar la matriz. En IPv6, se puede asignar a una sola interfaz varias direcciones de multidifusión IPv6 basadas en un identificador de ámbito.

Nota Este miembro de estructura solo está disponible en Windows XP con SP1 y versiones posteriores.
 

FirstPrefix

Tipo: PIP_ADAPTER_PREFIX

Puntero a la primera estructura de IP_ADAPTER_PREFIX en una lista vinculada de prefijos de adaptador IP para el adaptador.

Nota Este miembro de estructura solo está disponible en Windows XP con SP1 y versiones posteriores.
 

TransmitLinkSpeed

Tipo: ULONG64

Velocidad actual en bits por segundo del vínculo de transmisión para el adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

ReceiveLinkSpeed

Tipo: ULONG64

Velocidad actual en bits por segundo del vínculo de recepción del adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

FirstWinsServerAddress

Tipo: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

Puntero a la primera estructura de IP_ADAPTER_WINS_SERVER_ADDRESS en una lista vinculada de direcciones de servidor del Servicio de nombres de Internet (WINS) de Windows para el adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

FirstGatewayAddress

Tipo: PIP_ADAPTER_GATEWAY_ADDRESS_LH

Puntero a la primera estructura IP_ADAPTER_GATEWAY_ADDRESS de una lista vinculada de puertas de enlace para el adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Ipv4Metric

Tipo: ULONG

Métrica de interfaz IPv4 para la dirección del adaptador. Este miembro solo se aplica a una dirección de adaptador IPv4.

La métrica de ruta real que se usa para calcular las preferencias de ruta para IPv4 es la suma del desplazamiento de métrica de ruta especificado en el miembro Métrica de la estructura MIB_IPFORWARD_ROW2 y la métrica de interfaz especificada en este miembro para IPv4.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Ipv6Metric

Tipo: ULONG

Métrica de interfaz IPv6 para la dirección del adaptador. Este miembro solo es aplicable a una dirección de adaptador IPv6.

La métrica de ruta real que se usa para calcular las preferencias de ruta para IPv6 es la suma del desplazamiento de métrica de ruta especificado en el miembro Métrica de la estructura MIB_IPFORWARD_ROW2 y la métrica de interfaz especificada en este miembro para IPv4.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Luid

Tipo: IF_LUID

LUID de interfaz para la dirección del adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Dhcpv4Server

Tipo: SOCKET_ADDRESS

Dirección IPv4 del servidor DHCP para la dirección del adaptador. Este miembro solo se aplica a una dirección de adaptador IPv4 configurada mediante DHCP.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

CompartmentId

Tipo: NET_IF_COMPARTMENT_ID

Identificador del compartimiento de enrutamiento para la dirección del adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores. Este miembro no se admite actualmente y está reservado para uso futuro.
 

NetworkGuid

Tipo: NET_IF_NETWORK_GUID

GUID asociado a la red a la que pertenece la interfaz.

Si el proveedor de interfaz no puede proporcionar el GUID de red, este miembro puede ser un GUID cero. En este caso, NDIS registró la interfaz en la red predeterminada.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

ConnectionType

Tipo: NET_IF_CONNECTION_TYPE

Tipo de conexión de interfaz para la dirección del adaptador.

Este miembro puede ser uno de los valores del tipo de enumeración NET_IF_CONNECTION_TYPE definido en el archivo de encabezado Ifdef.h .

Valor Significado
NET_IF_CONNECTION_DEDICATED
1
El tipo de conexión está dedicado. La conexión aparece automáticamente cuando el sentido multimedia es TRUE. Por ejemplo, una conexión Ethernet está dedicada.
NET_IF_CONNECTION_PASSIVE
2
El tipo de conexión es pasivo. El extremo remoto debe abrir la conexión a la estación local. Por ejemplo, una interfaz RAS es pasiva.
NET_IF_CONNECTION_DEMAND
3
El tipo de conexión es de marcado a petición. Una conexión de este tipo aparece en respuesta a una acción local (por ejemplo, el envío de un paquete).
NET_IF_CONNECTION_MAXIMUM
4
Valor máximo posible para el tipo de enumeración NET_IF_CONNECTION_TYPE . Este no es un valor legal para el miembro ConnectionType .
 
Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

TunnelType

Tipo: TUNNEL_TYPE

Método de encapsulación utilizado por un túnel si la dirección del adaptador es un túnel.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 
El tipo de túnel se define mediante la Autoridad de nombres asignados a Internet (IANA). Para más información, consulte http://www.iana.org/assignments/ianaiftype-mib. Este miembro puede ser uno de los valores del tipo de enumeración TUNNEL_TYPE definido en el archivo de encabezado Ifdef.h .
Valor Significado
TUNNEL_TYPE_NONE
0
No es un túnel.
TUNNEL_TYPE_OTHER
1
Ninguno de los siguientes tipos de túnel.
TUNNEL_TYPE_DIRECT
2
Un paquete se encapsula directamente dentro de un encabezado IP normal, sin encabezado intermedio y unidifusión al punto de conexión del túnel remoto.
TUNNEL_TYPE_6TO4
11
Un paquete IPv6 se encapsula directamente dentro de un encabezado IPv4, sin encabezado intermedio y unidifusión al destino determinado por el protocolo 6to4.
TUNNEL_TYPE_ISATAP
13
Un paquete IPv6 se encapsula directamente dentro de un encabezado IPv4, sin encabezado intermedio y unidifusión al destino determinado por el protocolo ISATAP.
TUNNEL_TYPE_TEREDO
14
Encapsulación teredo para paquetes IPv6.
TUNNEL_TYPE_IPHTTPS
15
Ip sobre la encapsulación HTTPS para paquetes IPv6.
Nota Este valor de enumeración solo está disponible en Windows 7, Windows Server 2008 R2 y versiones posteriores.
 

Dhcpv6Server

Tipo: SOCKET_ADDRESS

Dirección IPv6 del servidor DHCPv6 para la dirección del adaptador. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6. Este miembro de estructura no se admite actualmente y está reservado para uso futuro.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

Tipo: BYTE[MAX_DHCPV6_DUID_LENGTH]

Identificador único DHCP (DUID) para el cliente DHCPv6. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Dhcpv6ClientDuidLength

Tipo: ULONG

Longitud, en bytes, del identificador único DHCP (DUID) para el cliente DHCPv6. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

Dhcpv6Iaid

Tipo: ULONG

Identificador de una asociación de identidad elegida por el cliente DHCPv6. Este miembro solo es aplicable a una dirección de adaptador IPv6 configurada mediante DHCPv6.

Nota Este miembro de estructura solo está disponible en Windows Vista y versiones posteriores.
 

FirstDnsSuffix

Tipo: PIP_ADAPTER_DNS_SUFFIX

Puntero a la primera estructura IP_ADAPTER_DNS_SUFFIX en una lista vinculada de sufijos DNS para el adaptador.

Nota Este miembro de estructura solo está disponible en Windows Vista con SP1 y versiones posteriores y en Windows Server 2008 y versiones posteriores.
 

Comentarios

La función GetAdaptersAddresses recupera información de direcciones IPv4 e IPv6 y devuelve esta información como una lista vinculada de estructuras de IP_ADAPTER_ADDRESSES

Los valores de índice del adaptador especificados en los miembros IfIndex e Ipv6IfIndex pueden cambiar cuando un adaptador está deshabilitado y, a continuación, habilitado, o en otras circunstancias, y no se debe considerar persistente.

Los valores del miembro IfType se definen en el archivo de encabezado Ipifcons.h . Actualmente solo se admiten los valores posibles enumerados en la descripción del miembro IfType .

El tamaño de la estructura de IP_ADAPTER_ADDRESSES cambió en Windows XP con SP1 y versiones posteriores. El tamaño de la estructura de IP_ADAPTER_ADDRESSES también cambió en Windows Vista y versiones posteriores. El tamaño de la estructura de IP_ADAPTER_ADDRESSES también cambió en Windows Vista con SP1 y versiones posteriores y enWindows Server 2008 y versiones posteriores. El miembro Length debe usarse para determinar qué versión de la estructura de IP_ADAPTER_ADDRESSES se usa.

La versión de la estructura de IP_ADAPTER_ADDRESSES en Windows XP con SP1 y versiones posteriores tiene los siguientes miembros nuevos agregados: Ipv6IfIndex, ZoneIndices y FirstPrefix.

La versión de la estructura de IP_ADAPTER_ADDRESSES en Windows Vista y versiones posteriores tiene agregados los siguientes miembros nuevos: TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength y Dhcpv6Iaid.

La versión de la estructura de IP_ADAPTER_ADDRESSES en Windows Vista con SP1 y versiones posteriores y en Windows Server 2008 y versiones posteriores tiene agregado el siguiente nuevo miembro: FirstDnsSuffix.

Los miembros Ipv4Metric e Ipv6Metric se usan para priorizar las métricas de ruta de las rutas conectadas a varias interfaces en el equipo local.

El orden de las estructuras de IP_ADAPTER_UNICAST_ADDRESS vinculadas a las que apunta el miembro FirstUnicastAddress devuelto por la función GetAdaptersAddresses no refleja el orden en que se agregaron direcciones IP a un adaptador y puede variar entre versiones de Windows. Del mismo modo, el orden de las estructuras de IP_ADAPTER_ANYCAST_ADDRESS vinculadas a las que apunta el miembro FirstAnycastAddress y el orden de las estructuras de IP_ADAPTER_MULTICAST_ADDRESS vinculadas a las que apunta el miembro FirstMulticastAddress no reflejan el orden en que se agregaron direcciones IP a un adaptador y pueden variar entre versiones de Windows.

Además, las estructuras de IP_ADAPTER_UNICAST_ADDRESS vinculadas a las que apunta el miembro FirstUnicastAddress y las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix se mantienen como listas vinculadas internas independientes por parte del sistema operativo. Como resultado, el orden de las estructuras de IP_ADAPTER_UNICAST_ADDRESS vinculadas a las que apunta el miembro FirstUnicastAddress no tiene ninguna relación con el orden de las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix .

En Windows Vista y versiones posteriores, las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix incluyen tres prefijos de adaptador IP para cada dirección IP asignada al adaptador. Estos incluyen el prefijo de dirección IP del host, el prefijo de dirección IP de subred y el prefijo de dirección IP de difusión de subred. Además, para cada adaptador hay un prefijo de dirección de multidifusión y un prefijo de dirección de difusión.

En Windows XP con SP1 y versiones posteriores antes de Windows Vista, las estructuras de IP_ADAPTER_PREFIX vinculadas a las que apunta el miembro FirstPrefix incluyen solo un prefijo de adaptador IP único para cada dirección IP asignada al adaptador.

En Windows SDK, la versión de la estructura para su uso en Windows Vista y versiones posteriores se define como IP_ADAPTER_ADDRESSES_LH. En el Kit de desarrollo de software (SDK) de Microsoft Windows, la versión de esta estructura que se usará en sistemas anteriores, incluido Windows XP con SP1 y versiones posteriores, se define como IP_ADAPTER_ADDRESSES_XP. Al compilar una aplicación si la plataforma de destino es Windows Vista y versiones posteriores (NTDDI_VERSION >= NTDDI_LONGHORN, _WIN32_WINNT >= 0x0600o WINVER >= 0x0600), la estructura IP_ADAPTER_ADDRESSES_LH se escribe en la estructura de IP_ADAPTER_ADDRESSES . Al compilar una aplicación si la plataforma de destino no es Windows Vista y versiones posteriores, la estructura de IP_ADAPTER_ADDRESSES_XP se escribe en la estructura IP_ADAPTER_ADDRESSES .

La estructura SOCKET_ADDRESS se usa en la estructura IP_ADAPTER_ADDRESSES . En windows SDK publicado para Windows Vista y versiones posteriores, la organización de archivos de encabezado ha cambiado y la estructura SOCKET_ADDRESS se define en el archivo de encabezado Ws2def.h que el archivo de encabezado Winsock2.h incluye automáticamente. En el Kit de desarrollo de software de plataforma (SDK) publicado para Windows Server 2003 y Windows XP, la estructura de SOCKET_ADDRESS se declara en el archivo de encabezado Winsock2.h . Para usar la estructura IP_ADAPTER_ADDRESSES , el archivo de encabezado Winsock2.h debe incluirse antes del archivo de encabezado Iphlpapi.h .

Ejemplos

En este ejemplo se recupera la estructura de IP_ADAPTER_ADDRESSES para los adaptadores asociados al sistema e imprime algunos miembros para cada interfaz de adaptador.

#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;
}

Requisitos

   
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado iptypes.h (include Iphlpapi.h)

Consulte también

GetAdaptersAddresses

IF_OPER_STATUS

Página de inicio del asistente de IP

Estructuras auxiliares de 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