Share via


estrutura IP_ADAPTER_ADDRESSES_LH (iptypes.h)

A estrutura IP_ADAPTER_ADDRESSES é o nó de cabeçalho para uma lista vinculada de endereços para um adaptador específico. Essa estrutura pode ser usada simultaneamente como parte de uma lista vinculada de estruturas de IP_ADAPTER_ADDRESSES .

Sintaxe

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;

Membros

Alignment

Tipo: ULONGLONG

Reservado. Usado pelo compilador para alinhar a estrutura.

Length

Tipo: ULONG

O comprimento, em bytes, dessa estrutura. Observe que o comprimento da estrutura de IP_ADAPTER_ADDRESSES foi alterado no Windows XP com SP1 e posterior e também no Windows Vista e posterior.

IfIndex

Tipo: DWORD

O índice da interface IPv4 com a qual esses endereços estão associados. No Windows Server 2003 e no Windows XP, esse membro será zero se o IPv4 não estiver disponível na interface.

Next

Tipo: struct _IP_ADAPTER_ADDRESSES*

Um ponteiro para a próxima estrutura de endereços do adaptador na lista.

AdapterName

Tipo: PCHAR

Uma matriz de caracteres que contém o nome do adaptador ao qual esses endereços estão associados. Ao contrário do nome amigável de um adaptador, o nome do adaptador especificado em AdapterName é permanente e não pode ser modificado pelo usuário.

FirstUnicastAddress

Tipo: PIP_ADAPTER_UNICAST_ADDRESS

Um ponteiro para a primeira estrutura IP_ADAPTER_UNICAST_ADDRESS em uma lista vinculada de endereços ip unicast para o adaptador.

FirstAnycastAddress

Tipo: PIP_ADAPTER_ANYCAST_ADDRESS

Um ponteiro para a primeira estrutura IP_ADAPTER_ANYCAST_ADDRESS em uma lista vinculada de endereços anycast IP para o adaptador.

FirstMulticastAddress

Tipo: PIP_ADAPTER_MULTICAST_ADDRESS

Um ponteiro para a primeira estrutura IP_ADAPTER_MULTICAST_ADDRESS em uma lista de endereços multicast IP para o adaptador.

FirstDnsServerAddress

Tipo: PIP_ADAPTER_DNS_SERVER_ADDRESS

Um ponteiro para a primeira estrutura IP_ADAPTER_DNS_SERVER_ADDRESS em uma lista vinculada de endereços de servidor DNS para o adaptador.

DnsSuffix

Tipo: PWCHAR

O sufixo DNS (Sistema de Nomes de Domínio) associado a esse adaptador.

Description

Tipo: PWCHAR

Uma descrição para o adaptador. Este membro é somente leitura.

FriendlyName

Tipo: PWCHAR

Um nome amigável para o adaptador. Por exemplo: "Conexão de Área Local 1". Esse nome aparece em contextos como o programa de linha de comando ipconfig e a pasta Conexão. Esse membro é somente leitura e não pode ser modificado usando nenhuma função auxiliar de IP.

Esse membro é o campo ifAlias usado pelo NDIS, conforme descrito em RFC 2863. O campo ifAlias pode ser definido por um provedor de interface NDIS quando o driver NDIS é instalado. Para drivers de miniporto NDIS, esse campo é definido pelo NDIS.

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

O endereço mac (Controle de Acesso de mídia) do adaptador. Por exemplo, em uma rede Ethernet, esse membro especificaria o endereço de hardware Ethernet.

PhysicalAddressLength

Tipo: DWORD

O comprimento, em bytes, do endereço especificado no membro PhysicalAddress . Para interfaces que não têm uma camada de vínculo de dados, esse valor é zero.

Flags

Tipo: DWORD

Um conjunto de sinalizadores que especifica várias configurações para o adaptador. Esses valores são definidos no arquivo de cabeçalho Iptypes.h . Combinações desses bits de sinalizador são possíveis.

Sinalizador Significado
IP_ADAPTER_DDNS_ENABLED
0x0001
O DNS dinâmico está habilitado neste adaptador.
IP_ADAPTER_REGISTER_ADAPTER_SUFFIX
0x0002
Registre o sufixo DNS para este adaptador.
IP_ADAPTER_DHCP_ENABLED
0x0004
O DHCP (Dynamic Host Configuration Protocol) está habilitado neste adaptador.
IP_ADAPTER_RECEIVE_ONLY
0x0008
O adaptador é um adaptador somente recebimento.
IP_ADAPTER_NO_MULTICAST
0x0010
O adaptador não é um destinatário multicast.
IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG
0x0020
O adaptador contém outras informações de configuração com estado específicas do IPv6.
IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED
0x0040
O adaptador está habilitado para NetBIOS por TCP/IP.
Nota Esse sinalizador só tem suporte no Windows Vista e posterior quando o aplicativo foi compilado para uma plataforma de destino com uma versão NTDDI igual ou maior que NTDDI_LONGHORN. Esse sinalizador é definido na estrutura IP_ADAPTER_ADDRESSES_LH como o campo de bits NetbiosOverTcpipEnabled .
 
IP_ADAPTER_IPV4_ENABLED
0x0080
O adaptador está habilitado para IPv4.
Nota Esse sinalizador só tem suporte no Windows Vista e posterior quando o aplicativo foi compilado para uma plataforma de destino com uma versão NTDDI igual ou maior que NTDDI_LONGHORN. Esse sinalizador é definido na estrutura IP_ADAPTER_ADDRESSES_LH como o campo de bits Ipv4Enabled .
 
IP_ADAPTER_IPV6_ENABLED
0x0100
O adaptador está habilitado para IPv6.
Nota Esse sinalizador só tem suporte no Windows Vista e posterior quando o aplicativo foi compilado para uma plataforma de destino com uma versão NTDDI igual ou maior que NTDDI_LONGHORN. Esse sinalizador é definido na estrutura IP_ADAPTER_ADDRESSES_LH como o campo de bits Ipv6Enabled .
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
O adaptador está habilitado para configuração de endereço gerenciado IPv6.
Nota Esse sinalizador só tem suporte no Windows Vista e posterior quando o aplicativo foi compilado para uma plataforma de destino com uma versão NTDDI igual ou maior que NTDDI_LONGHORN. Esse sinalizador é definido na estrutura IP_ADAPTER_ADDRESSES_LH como o campo de bits Ipv6ManagedAddressConfigurationSupported .
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

Tipo: DWORD

O tamanho máximo da MTU (unidade de transmissão), em bytes.

IfType

Tipo: DWORD

O tipo de interface conforme definido pela IANA (Autoridade de Nomes Atribuídos à Internet). Os valores possíveis para o tipo de interface são listados no arquivo de cabeçalho Ipifcons.h .

A tabela a seguir lista valores comuns para o tipo de interface, embora muitos outros valores sejam possíveis.

Valor Significado
IF_TYPE_OTHER
1
Algum outro tipo de adaptador de rede.
IF_TYPE_ETHERNET_CSMACD
6
Um adaptador de rede Ethernet.
IF_TYPE_ISO88025_TOKENRING
9
Um adaptador de rede de anel de token.
IF_TYPE_PPP
23
Um adaptador de rede PPP.
IF_TYPE_SOFTWARE_LOOPBACK
24
Um adaptador de rede de loopback de software.
IF_TYPE_ATM
37
Um adaptador de rede de caixa eletrônico.
IF_TYPE_IEEE80211
71
Um adaptador de rede sem fio IEEE 802.11.

No Windows Vista e posterior, os cartões de rede sem fio são relatados como IF_TYPE_IEEE80211. Em versões anteriores do Windows, cartões de rede sem fio são relatados como IF_TYPE_ETHERNET_CSMACD.

No Windows XP com SP3 e no Windows XP com SP2 x86 com a API de LAN Sem Fio para Windows XP com SP2 instalado, a função WlanEnumInterfaces pode ser usada para enumerar interfaces sem fio no computador local.

IF_TYPE_TUNNEL
131
Um adaptador de rede de encapsulamento de tipo de túnel.
IF_TYPE_IEEE1394
144
Um adaptador de rede de barramento serial de alto desempenho do IEEE 1394 (Firewire).

OperStatus

Tipo: IF_OPER_STATUS

O status operacional para a interface, conforme definido no RFC 2863. Para obter mais informações, consulte http://www.ietf.org/rfc/rfc2863.txt. Esse membro pode ser um dos valores do tipo de enumeração IF_OPER_STATUS definido no arquivo de cabeçalho Iftypes.h . No Windows Vista e posterior, os arquivos de cabeçalho foram reorganizados e essa enumeração é definida no arquivo de cabeçalho Ifdef.h .

Valor Significado
IfOperStatusUp
1
A interface está atualizada e pode passar pacotes.
IfOperStatusDown
2
A interface está inativa e não está em uma condição para passar pacotes. O estado IfOperStatusDown tem dois significados, dependendo do valor do membro AdminStatus . Se AdminStatus não estiver definido como NET_IF_ADMIN_STATUS_DOWN e seOperStatus estiver definido como IfOperStatusDown , uma condição de falha deverá existir na interface. Se AdminStatus estiver definido como IfOperStatusDown, seOperStatus normalmente também será definido como IfOperStatusDown ou IfOperStatusNotPresent e não haverá necessariamente uma condição de falha na interface.
IfOperStatusTesting
3
A interface está no modo de teste.
IfOperStatusUnknown
4
O status operacional da interface é desconhecido.
IfOperStatusDormant
5
Na verdade, a interface não está em uma condição para passar pacotes (não está ativa), mas está em um estado pendente, aguardando algum evento externo. Para interfaces sob demanda, esse novo estado identifica a situação em que a interface está aguardando eventos para colocá-la no estado IfOperStatusUp .
IfOperStatusNotPresent
6
Um refinamento no estado IfOperStatusDown que indica que a interface relevante está inativa especificamente porque algum componente (normalmente, um componente de hardware) não está presente no sistema gerenciado.
IfOperStatusLowerLayerDown
7
Um refinamento no estado IfOperStatusDown . Esse novo estado indica que essa interface é executada sobre uma ou mais outras interfaces e que essa interface está inativa especificamente porque uma ou mais dessas interfaces de camada inferior estão inativas.

Ipv6IfIndex

Tipo: DWORD

O índice de interface para o endereço IP IPv6. Esse membro será zero se o IPv6 não estiver disponível na interface.

Nota Esse membro da estrutura só está disponível no Windows XP com SP1 e posterior.
 

ZoneIndices[16]

Tipo: DWORD[16]

Uma matriz de IDs de escopo para cada nível de escopo usado para compor estruturas sockaddr . A enumeração SCOPE_LEVEL é usada para indexar a matriz. No IPv6, uma única interface pode receber vários endereços multicast IPv6 com base em uma ID de escopo.

Nota Esse membro da estrutura só está disponível no Windows XP com SP1 e posterior.
 

FirstPrefix

Tipo: PIP_ADAPTER_PREFIX

Um ponteiro para a primeira estrutura IP_ADAPTER_PREFIX em uma lista vinculada de prefixos de adaptador IP para o adaptador.

Nota Esse membro da estrutura só está disponível no Windows XP com SP1 e posterior.
 

TransmitLinkSpeed

Tipo: ULONG64

A velocidade atual em bits por segundo do link de transmissão para o adaptador.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

ReceiveLinkSpeed

Tipo: ULONG64

A velocidade atual em bits por segundo do link de recebimento para o adaptador.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

FirstWinsServerAddress

Tipo: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

Um ponteiro para a primeira estrutura IP_ADAPTER_WINS_SERVER_ADDRESS em uma lista vinculada de endereços de servidor WINS (Serviço de Nomes da Internet) do Windows para o adaptador.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

FirstGatewayAddress

Tipo: PIP_ADAPTER_GATEWAY_ADDRESS_LH

Um ponteiro para a primeira estrutura IP_ADAPTER_GATEWAY_ADDRESS em uma lista vinculada de gateways para o adaptador.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Ipv4Metric

Tipo: ULONG

A métrica da interface IPv4 para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv4.

A métrica de rota real usada para calcular as preferências de rota para IPv4 é a soma do deslocamento de métrica de rota especificado no membro Métrica da estrutura MIB_IPFORWARD_ROW2 e a métrica de interface especificada neste membro para IPv4.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Ipv6Metric

Tipo: ULONG

A métrica de interface IPv6 para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv6.

A métrica de rota real usada para calcular as preferências de rota para IPv6 é a soma do deslocamento de métrica de rota especificado no membro Métrica da estrutura MIB_IPFORWARD_ROW2 e a métrica de interface especificada neste membro para IPv4.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Luid

Tipo: IF_LUID

A LUID da interface para o endereço do adaptador.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Dhcpv4Server

Tipo: SOCKET_ADDRESS

O endereço IPv4 do servidor DHCP para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv4 configurado usando DHCP.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

CompartmentId

Tipo: NET_IF_COMPARTMENT_ID

A ID do compartimento de roteamento para o endereço do adaptador.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior. Este membro não tem suporte no momento e está reservado para uso futuro.
 

NetworkGuid

Tipo: NET_IF_NETWORK_GUID

O GUID associado à rede à qual a interface pertence.

Se o provedor de interface não puder fornecer o GUID de rede, esse membro poderá ser um GUID zero. Nesse caso, a interface foi registrada pelo NDIS na rede padrão.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

ConnectionType

Tipo: NET_IF_CONNECTION_TYPE

O tipo de conexão de interface para o endereço do adaptador.

Esse membro pode ser um dos valores do tipo de enumeração NET_IF_CONNECTION_TYPE definido no arquivo de cabeçalho Ifdef.h .

Valor Significado
NET_IF_CONNECTION_DEDICATED
1
O tipo de conexão é dedicado. A conexão aparece automaticamente quando o sentido de mídia é TRUE. Por exemplo, uma conexão Ethernet é dedicada.
NET_IF_CONNECTION_PASSIVE
2
O tipo de conexão é passivo. A extremidade remota deve abrir a conexão com a estação local. Por exemplo, uma interface RAS é passiva.
NET_IF_CONNECTION_DEMAND
3
O tipo de conexão é demand-dial. Uma conexão desse tipo aparece em resposta a uma ação local (enviando um pacote, por exemplo).
NET_IF_CONNECTION_MAXIMUM
4
O valor máximo possível para o tipo de enumeração NET_IF_CONNECTION_TYPE . Esse não é um valor legal para o membro ConnectionType .
 
Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

TunnelType

Tipo: TUNNEL_TYPE

O método de encapsulamento usado por um túnel se o endereço do adaptador for um túnel.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 
O tipo de túnel é definido pela IANA (Internet Assigned Names Authority). Para obter mais informações, consulte http://www.iana.org/assignments/ianaiftype-mib. Esse membro pode ser um dos valores do tipo de enumeração TUNNEL_TYPE definido no arquivo de cabeçalho Ifdef.h .
Valor Significado
TUNNEL_TYPE_NONE
0
Não é um túnel.
TUNNEL_TYPE_OTHER
1
Nenhum dos tipos de túnel a seguir.
TUNNEL_TYPE_DIRECT
2
Um pacote é encapsulado diretamente em um cabeçalho IP normal, sem cabeçalho intermediário e unicast para o ponto de extremidade do túnel remoto.
TUNNEL_TYPE_6TO4
11
Um pacote IPv6 é encapsulado diretamente em um cabeçalho IPv4, sem cabeçalho intermediário e unicast para o destino determinado pelo protocolo 6to4.
TUNNEL_TYPE_ISATAP
13
Um pacote IPv6 é encapsulado diretamente em um cabeçalho IPv4, sem cabeçalho intermediário e unicast para o destino determinado pelo protocolo ISATAP.
TUNNEL_TYPE_TEREDO
14
Encapsulamento teredo para pacotes IPv6.
TUNNEL_TYPE_IPHTTPS
15
Encapsulamento IP por HTTPS para pacotes IPv6.
Nota Esse valor de enumeração só está disponível no Windows 7, no Windows Server 2008 R2 e posterior.
 

Dhcpv6Server

Tipo: SOCKET_ADDRESS

O endereço IPv6 do servidor DHCPv6 para o endereço do adaptador. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6. No momento, esse membro de estrutura não tem suporte e está reservado para uso futuro.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

Tipo: BYTE[MAX_DHCPV6_DUID_LENGTH]

O DUID (identificador exclusivo) DHCP para o cliente DHCPv6. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Dhcpv6ClientDuidLength

Tipo: ULONG

O comprimento, em bytes, do DUID (identificador exclusivo) dhcp para o cliente DHCPv6. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

Dhcpv6Iaid

Tipo: ULONG

O identificador de uma associação de identidade escolhida pelo cliente DHCPv6. Esse membro só é aplicável a um endereço do adaptador IPv6 configurado usando DHCPv6.

Nota Esse membro da estrutura só está disponível no Windows Vista e posterior.
 

FirstDnsSuffix

Tipo: PIP_ADAPTER_DNS_SUFFIX

Um ponteiro para a primeira estrutura IP_ADAPTER_DNS_SUFFIX em uma lista vinculada de sufixos DNS para o adaptador.

Nota Esse membro de estrutura só está disponível no Windows Vista com SP1 e posterior e no Windows Server 2008 e posterior.
 

Comentários

A função GetAdaptersAddresses recupera informações para endereços IPv4 e IPv6 e retorna essas informações como uma lista vinculada de estruturas de IP_ADAPTER_ADDRESSES

Os valores de índice do adaptador especificados nos membros IfIndex e Ipv6IfIndex podem ser alterados quando um adaptador é desabilitado e habilitado, ou em outras circunstâncias, e não devem ser considerados persistentes.

Os valores do membro IfType são definidos no arquivo de cabeçalho Ipifcons.h . Somente os valores possíveis listados na descrição do membro IfType têm suporte no momento.

O tamanho da estrutura IP_ADAPTER_ADDRESSES foi alterado no Windows XP com SP1 e posterior. O tamanho da estrutura de IP_ADAPTER_ADDRESSES também foi alterado no Windows Vista e posterior. O tamanho da estrutura de IP_ADAPTER_ADDRESSES também foi alterado no Windows Vista com SP1 e posterior e noWindows Server 2008 e posterior. O membro Length deve ser usado para determinar qual versão da estrutura IP_ADAPTER_ADDRESSES está sendo usada.

A versão da estrutura IP_ADAPTER_ADDRESSES no Windows XP com SP1 e posteriores tem os seguintes novos membros adicionados: Ipv6IfIndex, ZoneIndices e FirstPrefix.

A versão da estrutura IP_ADAPTER_ADDRESSES no Windows Vista e posteriores tem os seguintes novos membros adicionados: TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength e Dhcpv6Iaid.

A versão do IP_ADAPTER_ADDRESSES estrutura no Windows Vista com SP1 e posterior e no Windows Server 2008 e posteriores tem o seguinte novo membro adicionado: FirstDnsSuffix.

Os membros Ipv4Metric e Ipv6Metric são usados para priorizar as métricas de rota para rotas conectadas a várias interfaces no computador local.

A ordem das estruturas de IP_ADAPTER_UNICAST_ADDRESS vinculadas apontadas pelo membro FirstUnicastAddress que são retornadas pela função GetAdaptersAddresses não reflete a ordem em que os endereços IP foram adicionados a um adaptador e podem variar entre as versões do Windows. Da mesma forma, a ordem das estruturas de IP_ADAPTER_ANYCAST_ADDRESS vinculadas apontadas pelo membro FirstAnycastAddress e a ordem das estruturas de IP_ADAPTER_MULTICAST_ADDRESS vinculadas apontadas pelo membro FirstMulticastAddress não refletem a ordem em que os endereços IP foram adicionados a um adaptador e podem variar entre as versões do Windows.

Além disso, as estruturas de IP_ADAPTER_UNICAST_ADDRESS vinculadas apontadas pelo membro FirstUnicastAddress e as estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix são mantidas como listas vinculadas internas separadas pelo sistema operacional. Como resultado, a ordem das estruturas de IP_ADAPTER_UNICAST_ADDRESS vinculadas apontadas pelo membro FirstUnicastAddress não tem nenhuma relação com a ordem das estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix .

No Windows Vista e posterior, as estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix incluem três prefixos de adaptador IP para cada endereço IP atribuído ao adaptador. Isso inclui o prefixo de endereço IP do host, o prefixo de endereço IP da sub-rede e o prefixo de endereço IP de difusão de sub-rede. Além disso, para cada adaptador, há um prefixo de endereço multicast e um prefixo de endereço de difusão.

No Windows XP com SP1 e posterior antes do Windows Vista, as estruturas de IP_ADAPTER_PREFIX vinculadas apontadas pelo membro FirstPrefix incluem apenas um único prefixo de adaptador IP para cada endereço IP atribuído ao adaptador.

No SDK do Windows, a versão da estrutura para uso no Windows Vista e posterior é definida como IP_ADAPTER_ADDRESSES_LH. No SDK (Software Development Kit) do Microsoft Windows, a versão dessa estrutura a ser usada em sistemas anteriores, incluindo o Windows XP com SP1 e posterior, é definida como IP_ADAPTER_ADDRESSES_XP. Ao compilar um aplicativo se a plataforma de destino for Windows Vista e posterior (NTDDI_VERSION >= NTDDI_LONGHORN, _WIN32_WINNT >= 0x0600ou WINVER >= 0x0600), a estrutura IP_ADAPTER_ADDRESSES_LH será digitada para a estrutura IP_ADAPTER_ADDRESSES . Ao compilar um aplicativo se a plataforma de destino não for Windows Vista e posterior, a estrutura IP_ADAPTER_ADDRESSES_XP será digitada para a estrutura IP_ADAPTER_ADDRESSES .

A estrutura SOCKET_ADDRESS é usada na estrutura IP_ADAPTER_ADDRESSES . No SDK do Windows lançado para Windows Vista e posterior, a organização dos arquivos de cabeçalho foi alterada e a estrutura SOCKET_ADDRESS é definida no arquivo de cabeçalho Ws2def.h , que é incluído automaticamente pelo arquivo de cabeçalho Winsock2.h . No SDK (Platform Software Development Kit) lançado para Windows Server 2003 e Windows XP, a estrutura SOCKET_ADDRESS é declarada no arquivo de cabeçalho Winsock2.h . Para usar a estrutura IP_ADAPTER_ADDRESSES , o arquivo de cabeçalho Winsock2.h deve ser incluído antes do arquivo de cabeçalho Iphlpapi.h .

Exemplos

Este exemplo recupera a estrutura IP_ADAPTER_ADDRESSES para os adaptadores associados ao sistema e imprime alguns membros para cada interface do 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 com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho iptypes.h (inclua Iphlpapi.h)

Confira também

Getadaptersaddresses

IF_OPER_STATUS

Página Inicial do Auxiliar de IP

Estruturas 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