Share via


struttura IP_ADAPTER_ADDRESSES_LH (iptypes.h)

La struttura IP_ADAPTER_ADDRESSES è il nodo di intestazione per un elenco collegato di indirizzi per una scheda specifica. Questa struttura può essere usata contemporaneamente come parte di un elenco collegato di strutture IP_ADAPTER_ADDRESSES .

Sintassi

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

Riservato. Utilizzato dal compilatore per allineare la struttura.

Length

Tipo: ULONG

Lunghezza, in byte, di questa struttura. Si noti che la lunghezza della struttura IP_ADAPTER_ADDRESSES è cambiata in Windows XP con SP1 e versioni successive e anche in Windows Vista e versioni successive.

IfIndex

Tipo: DWORD

Indice dell'interfaccia IPv4 a cui sono associati questi indirizzi. In Windows Server 2003 e Windows XP questo membro è zero se IPv4 non è disponibile nell'interfaccia.

Next

Tipo: struct _IP_ADAPTER_ADDRESSES*

Puntatore alla struttura degli indirizzi dell'adattatore successivo nell'elenco.

AdapterName

Tipo: PCHAR

Matrice di caratteri che contiene il nome dell'adattatore a cui sono associati questi indirizzi. A differenza del nome descrittivo di un adattatore, il nome dell'adattatore specificato in AdapterName è permanente e non può essere modificato dall'utente.

FirstUnicastAddress

Tipo: PIP_ADAPTER_UNICAST_ADDRESS

Puntatore alla prima struttura IP_ADAPTER_UNICAST_ADDRESS in un elenco collegato di indirizzi UNICAST IP per l'adattatore.

FirstAnycastAddress

Tipo: PIP_ADAPTER_ANYCAST_ADDRESS

Puntatore alla prima struttura IP_ADAPTER_ANYCAST_ADDRESS in un elenco collegato di indirizzi anycast IP per l'adattatore.

FirstMulticastAddress

Tipo: PIP_ADAPTER_MULTICAST_ADDRESS

Puntatore alla prima struttura IP_ADAPTER_MULTICAST_ADDRESS in un elenco di indirizzi multicast IP per l'adattatore.

FirstDnsServerAddress

Tipo: PIP_ADAPTER_DNS_SERVER_ADDRESS

Puntatore alla prima struttura IP_ADAPTER_DNS_SERVER_ADDRESS in un elenco collegato di indirizzi del server DNS per la scheda.

DnsSuffix

Tipo: PWCHAR

Suffisso DNS (Domain Name System) associato a questa scheda.

Description

Tipo: PWCHAR

Descrizione dell'adattatore. Questo membro è di sola lettura.

FriendlyName

Tipo: PWCHAR

Nome descrittivo per l'adapter. Ad esempio: "Connessione area locale 1". Questo nome viene visualizzato in contesti quali il programma della riga di comando ipconfig e la cartella Connection. Questo membro è di sola lettura e non può essere modificato usando alcuna funzione helper IP.

Questo membro è il campo ifAlias usato da NDIS come descritto in RFC 2863. Il campo ifAlias può essere impostato da un provider di interfaccia NDIS quando viene installato il driver NDIS. Per i driver miniport NDIS, questo campo viene impostato da NDIS.

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

Indirizzo mac (Media Controllo di accesso) per l'adattatore. Ad esempio, in una rete Ethernet questo membro specifica l'indirizzo hardware Ethernet.

PhysicalAddressLength

Tipo: DWORD

Lunghezza, in byte, dell'indirizzo specificato nel membro PhysicalAddress . Per le interfacce che non dispongono di un livello di collegamento dati, questo valore è zero.

Flags

Tipo: DWORD

Set di flag che specificano varie impostazioni per l'adattatore. Questi valori sono definiti nel file di intestazione Iptypes.h . Sono possibili combinazioni di questi bit di flag.

Flag Significato
IP_ADAPTER_DDNS_ENABLED
0x0001
DNS dinamico è abilitato in questa scheda.
IP_ADAPTER_REGISTER_ADAPTER_SUFFIX
0x0002
Registrare il suffisso DNS per questa scheda.
IP_ADAPTER_DHCP_ENABLED
0x0004
Il protocollo DHCP (Dynamic Host Configuration Protocol) è abilitato in questa scheda.
IP_ADAPTER_RECEIVE_ONLY
0x0008
L'adattatore è un adattatore di sola ricezione.
IP_ADAPTER_NO_MULTICAST
0x0010
L'adapter non è un destinatario multicast.
IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG
0x0020
L'adattatore contiene altre informazioni di configurazione con stato specifiche di IPv6.
IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED
0x0040
La scheda è abilitata per NetBIOS su TCP/IP.
Nota Questo flag è supportato solo in Windows Vista e versioni successive quando l'applicazione è stata compilata per una piattaforma di destinazione con una versione NTDDI uguale o maggiore di NTDDI_LONGHORN. Questo flag viene definito nella struttura IP_ADAPTER_ADDRESSES_LH come campo di bit NetbiosOverTcpipEnabled .
 
IP_ADAPTER_IPV4_ENABLED
0x0080
L'adattatore è abilitato per IPv4.
Nota Questo flag è supportato solo in Windows Vista e versioni successive quando l'applicazione è stata compilata per una piattaforma di destinazione con una versione NTDDI uguale o maggiore di NTDDI_LONGHORN. Questo flag viene definito nella struttura IP_ADAPTER_ADDRESSES_LH come campo di bit Ipv4Enabled .
 
IP_ADAPTER_IPV6_ENABLED
0x0100
L'adattatore è abilitato per IPv6.
Nota Questo flag è supportato solo in Windows Vista e versioni successive quando l'applicazione è stata compilata per una piattaforma di destinazione con una versione NTDDI uguale o maggiore di NTDDI_LONGHORN. Questo flag viene definito nella struttura IP_ADAPTER_ADDRESSES_LH come campo di bit Ipv6Enabled .
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
L'adattatore è abilitato per la configurazione dell'indirizzo gestito IPv6.
Nota Questo flag è supportato solo in Windows Vista e versioni successive quando l'applicazione è stata compilata per una piattaforma di destinazione con una versione NTDDI uguale o maggiore di NTDDI_LONGHORN. Questo flag viene definito nella struttura IP_ADAPTER_ADDRESSES_LH come campo di bit Ipv6ManagedAddressConfigurationSupported .
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

Tipo: DWORD

Dimensione massima dell'unità di trasmissione (MTU), espressa in byte.

IfType

Tipo: DWORD

Tipo di interfaccia definito dall'autorità IANA (Internet Assigned Names Authority). I valori possibili per il tipo di interfaccia sono elencati nel file di intestazione Ipifcons.h .

La tabella seguente elenca i valori comuni per il tipo di interfaccia anche se sono possibili molti altri valori.

Valore Significato
IF_TYPE_OTHER
1
Un altro tipo di interfaccia di rete.
IF_TYPE_ETHERNET_CSMACD
6
Interfaccia di rete Ethernet.
IF_TYPE_ISO88025_TOKENRING
9
Interfaccia di rete dell'anello del token.
IF_TYPE_PPP
23
Interfaccia di rete PPP.
IF_TYPE_SOFTWARE_LOOPBACK
24
Interfaccia di rete di loopback software.
IF_TYPE_ATM
37
Interfaccia di rete ATM.
IF_TYPE_IEEE80211
71
Interfaccia di rete wireless IEEE 802.11.

In Windows Vista e versioni successive, le schede di rete wireless vengono segnalate come IF_TYPE_IEEE80211. Nelle versioni precedenti di Windows, le schede di rete wireless vengono segnalate come IF_TYPE_ETHERNET_CSMACD.

In Windows XP con SP3 e in Windows XP con SP2 x86 con l'API LAN wireless per Windows XP con SP2 installata, la funzione WlanEnumInterfaces può essere usata per enumerare le interfacce wireless nel computer locale.

IF_TYPE_TUNNEL
131
Interfaccia di rete incapsulamento del tipo di tunnel.
IF_TYPE_IEEE1394
144
Interfaccia di rete del bus seriale IEEE 1394 (Firewire).

OperStatus

Tipo: IF_OPER_STATUS

Stato operativo per l'interfaccia come definito in RFC 2863. Per altre informazioni, vedere http://www.ietf.org/rfc/rfc2863.txt. Questo membro può essere uno dei valori del tipo di enumerazione IF_OPER_STATUS definito nel file di intestazione Iftypes.h . In Windows Vista e versioni successive i file di intestazione sono stati riorganizzati e questa enumerazione è definita nel file di intestazione Ifdef.h .

Valore Significato
IfOperStatusUp
1
L'interfaccia è in grado di passare pacchetti.
IfOperStatusDown
2
L'interfaccia è inattiva e non in una condizione per passare pacchetti. Lo stato IfOperStatusDown ha due significati, a seconda del valore del membro AdminStatus . Se AdminStatus non è impostato su NET_IF_ADMIN_STATUS_DOWN e ifOperStatus è impostato su IfOperStatusDown , si presuppone che nell'interfaccia esista una condizione di errore. Se AdminStatus è impostato su IfOperStatusDown, ifOperStatus in genere verrà impostato anche su IfOperStatusDown o IfOperStatusNotPresent e non è necessariamente presente una condizione di errore nell'interfaccia.
IfOperStatusTesting
3
L'interfaccia è in modalità di test.
IfOperStatusUnknown
4
Lo stato operativo dell'interfaccia è sconosciuto.
IfOperStatusDormant
5
L'interfaccia non è in realtà in una condizione per passare pacchetti (non è attivo), ma è in sospeso, in attesa di un evento esterno. Per le interfacce su richiesta, questo nuovo stato identifica la situazione in cui l'interfaccia è in attesa che gli eventi lo inserisca nello stato IfOperStatusUp .
IfOperStatusNotPresent
6
Un perfezionamento dello stato IfOperStatusDown che indica che l'interfaccia pertinente è inattiva specificamente perché alcuni componenti (in genere, un componente hardware) non sono presenti nel sistema gestito.
IfOperStatusLowerLayerDown
7
Perfezionamento dello stato IfOperStatusDown . Questo nuovo stato indica che questa interfaccia viene eseguita sopra una o più interfacce e che questa interfaccia è inattiva specificamente perché una o più di queste interfacce di livello inferiore sono inattiva.

Ipv6IfIndex

Tipo: DWORD

Indice dell'interfaccia per l'indirizzo IP IPv6. Questo membro è zero se IPv6 non è disponibile nell'interfaccia.

Nota Questo membro della struttura è disponibile solo in Windows XP con SP1 e versioni successive.
 

ZoneIndices[16]

Tipo: DWORD[16]

Matrice di ID ambito per ogni livello di ambito usato per la composizione di strutture sockaddr . L'enumerazione SCOPE_LEVEL viene usata per indicizzare la matrice. In IPv6 è possibile assegnare a una singola interfaccia più indirizzi multicast IPv6 in base a un ID ambito.

Nota Questo membro della struttura è disponibile solo in Windows XP con SP1 e versioni successive.
 

FirstPrefix

Tipo: PIP_ADAPTER_PREFIX

Puntatore alla prima struttura IP_ADAPTER_PREFIX in un elenco collegato di prefissi dell'adattatore IP per l'adattatore.

Nota Questo membro della struttura è disponibile solo in Windows XP con SP1 e versioni successive.
 

TransmitLinkSpeed

Tipo: ULONG64

Velocità corrente in bit al secondo del collegamento di trasmissione per l'adattatore.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

ReceiveLinkSpeed

Tipo: ULONG64

Velocità corrente in bit al secondo del collegamento di ricezione per l'adattatore.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

FirstWinsServerAddress

Tipo: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

Puntatore alla prima struttura IP_ADAPTER_WINS_SERVER_ADDRESS in un elenco collegato di indirizzi server WINS (Internet Name Service) di Windows per la scheda.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

FirstGatewayAddress

Tipo: PIP_ADAPTER_GATEWAY_ADDRESS_LH

Puntatore alla prima struttura IP_ADAPTER_GATEWAY_ADDRESS in un elenco collegato di gateway per l'adattatore.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Ipv4Metric

Tipo: ULONG

Metrica dell'interfaccia IPv4 per l'indirizzo dell'adattatore. Questo membro è applicabile solo a un indirizzo dell'adapter IPv4.

La metrica di route effettiva usata per calcolare le preferenze di route per IPv4 è la somma dell'offset della metrica di route specificato nel membro Metrica della struttura MIB_IPFORWARD_ROW2 e la metrica di interfaccia specificata in questo membro per IPv4.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Ipv6Metric

Tipo: ULONG

Metrica dell'interfaccia IPv6 per l'indirizzo dell'adattatore. Questo membro è applicabile solo a un indirizzo dell'adapter IPv6.

La metrica di route effettiva usata per calcolare le preferenze di route per IPv6 è la somma dell'offset della metrica di route specificato nel membro Metrica della struttura MIB_IPFORWARD_ROW2 e la metrica di interfaccia specificata in questo membro per IPv4.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Luid

Tipo: IF_LUID

Interfaccia LUID per l'indirizzo dell'adattatore.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Dhcpv4Server

Tipo: SOCKET_ADDRESS

Indirizzo IPv4 del server DHCP per l'indirizzo della scheda. Questo membro è applicabile solo a un indirizzo adattatore IPv4 configurato tramite DHCP.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

CompartmentId

Tipo: NET_IF_COMPARTMENT_ID

ID del raggruppamento di routing per l'indirizzo dell'adattatore.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive. Questo membro non è attualmente supportato ed è riservato per l'uso futuro.
 

NetworkGuid

Tipo: NET_IF_NETWORK_GUID

GUID associato alla rete a cui appartiene l'interfaccia.

Se il provider di interfaccia non può fornire il GUID di rete, questo membro può essere un GUID zero. In questo caso, l'interfaccia è stata registrata da NDIS nella rete predefinita.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

ConnectionType

Tipo: NET_IF_CONNECTION_TYPE

Tipo di connessione dell'interfaccia per l'indirizzo dell'adattatore.

Questo membro può essere uno dei valori del tipo di enumerazione NET_IF_CONNECTION_TYPE definito nel file di intestazione Ifdef.h .

Valore Significato
NET_IF_CONNECTION_DEDICATED
1
Il tipo di connessione è dedicato. La connessione viene visualizzata automaticamente quando il senso multimediale è TRUE. Ad esempio, una connessione Ethernet è dedicata.
NET_IF_CONNECTION_PASSIVE
2
Il tipo di connessione è passivo. L'estremità remota deve visualizzare la connessione alla stazione locale. Ad esempio, un'interfaccia RAS è passiva.
NET_IF_CONNECTION_DEMAND
3
Il tipo di connessione è di tipo demand-dial. Una connessione di questo tipo viene visualizzata in risposta a un'azione locale (ad esempio l'invio di un pacchetto).
NET_IF_CONNECTION_MAXIMUM
4
Valore massimo possibile per il tipo di enumerazione NET_IF_CONNECTION_TYPE. Non è un valore legale per il membro ConnectionType .
 
Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

TunnelType

Tipo: TUNNEL_TYPE

Metodo di incapsulamento usato da un tunnel se l'indirizzo dell'adattatore è un tunnel.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 
Il tipo di tunnel è definito dall'autorità IANA (Internet Assigned Name Authority). Per altre informazioni, vedere http://www.iana.org/assignments/ianaiftype-mib. Questo membro può essere uno dei valori del tipo di enumerazione TUNNEL_TYPE definito nel file di intestazione Ifdef.h .
Valore Significato
TUNNEL_TYPE_NONE
0
Non un tunnel.
TUNNEL_TYPE_OTHER
1
Nessuno dei tipi di tunnel seguenti.
TUNNEL_TYPE_DIRECT
2
Un pacchetto viene incapsulato direttamente all'interno di un'intestazione IP normale, senza intestazione intermedia e unicast all'endpoint del tunnel remoto.
TUNNEL_TYPE_6TO4
11
Un pacchetto IPv6 viene incapsulato direttamente all'interno di un'intestazione IPv4, senza intestazione intermedia e unicast alla destinazione determinata dal protocollo 6to4.
TUNNEL_TYPE_ISATAP
13
Un pacchetto IPv6 viene incapsulato direttamente all'interno di un'intestazione IPv4, senza intestazione intermedia e unicast alla destinazione determinata dal protocollo ISATAP.
TUNNEL_TYPE_TEREDO
14
Incapsulamento teredo per i pacchetti IPv6.
TUNNEL_TYPE_IPHTTPS
15
Incapsulamento IP su HTTPS per i pacchetti IPv6.
Nota Questo valore di enumerazione è disponibile solo in Windows 7, Windows Server 2008 R2 e versioni successive.
 

Dhcpv6Server

Tipo: SOCKET_ADDRESS

Indirizzo IPv6 del server DHCPv6 per l'indirizzo dell'adapter. Questo membro è applicabile solo a un indirizzo adattatore IPv6 configurato usando DHCPv6. Questo membro della struttura non è attualmente supportato ed è riservato per l'uso futuro.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

Tipo: BYTE[MAX_DHCPV6_DUID_LENGTH]

Identificatore univoco DHCP (DUID) per il client DHCPv6. Questo membro è applicabile solo a un indirizzo adattatore IPv6 configurato usando DHCPv6.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Dhcpv6ClientDuidLength

Tipo: ULONG

Lunghezza, in byte, dell'identificatore univoco DHCP (DUID) per il client DHCPv6. Questo membro è applicabile solo a un indirizzo adattatore IPv6 configurato usando DHCPv6.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

Dhcpv6Iaid

Tipo: ULONG

Identificatore per un'associazione di identità scelta dal client DHCPv6. Questo membro è applicabile solo a un indirizzo adattatore IPv6 configurato usando DHCPv6.

Nota Questo membro della struttura è disponibile solo in Windows Vista e versioni successive.
 

FirstDnsSuffix

Tipo: PIP_ADAPTER_DNS_SUFFIX

Puntatore alla prima struttura IP_ADAPTER_DNS_SUFFIX in un elenco collegato di suffisso DNS per l'adapter.

Nota Questo membro della struttura è disponibile solo in Windows Vista con SP1 e versioni successive e in Windows Server 2008 e versioni successive.
 

Commenti

La funzione GetAdaptersAddresses recupera informazioni per indirizzi IPv4 e IPv6 e restituisce queste informazioni come elenco collegato di strutture IP_ADAPTER_ADDRESSES

I valori di indice dell'adapter specificati nei membri IfIndex e Ipv6IfIndex possono cambiare quando un adattatore è disabilitato e quindi abilitato o in altre circostanze e non deve essere considerato persistente.

I valori per il membro IfType sono definiti nel file di intestazione Ipifcons.h . Sono attualmente supportati solo i valori possibili elencati nella descrizione del membro IfType .

Le dimensioni della struttura di IP_ADAPTER_ADDRESSES sono state modificate in Windows XP con SP1 e versioni successive. Le dimensioni della struttura IP_ADAPTER_ADDRESSES sono state modificate anche in Windows Vista e versioni successive. Le dimensioni della struttura IP_ADAPTER_ADDRESSES sono state modificate anche in Windows Vista con SP1 e versioni successive e inWindows Server 2008 e versioni successive. Il membro Length deve essere usato per determinare quale versione della struttura IP_ADAPTER_ADDRESSES viene usata.

La versione della struttura IP_ADAPTER_ADDRESSES in Windows XP con SP1 e versioni successive include i nuovi membri seguenti aggiunti: Ipv6IfIndex, ZoneIndices e FirstPrefix.

La versione della struttura IP_ADAPTER_ADDRESSES in Windows Vista e versioni successive ha aggiunto i nuovi membri seguenti: TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6ClientDuid, Dhcpv6ClientDuid,Dhcpv6ClientDuidLength e Dhcpv6Iaid.

La versione della struttura IP_ADAPTER_ADDRESSES in Windows Vista con SP1and successiva e in Windows Server 2008 e versioni successive ha aggiunto il nuovo membro seguente: FirstDnsSuffix.

I membri Ipv4Metric e Ipv6Metric vengono usati per assegnare priorità alle metriche di route per le route connesse a più interfacce nel computer locale.

L'ordine delle strutture IP_ADAPTER_UNICAST_ADDRESS collegate a cui punta il membro FirstUnicastAddress restituito dalla funzione GetAdaptersAddresses non riflette l'ordine in cui gli indirizzi IP sono stati aggiunti a un adattatore e possono variare tra le versioni di Windows. Analogamente, l'ordine delle strutture IP_ADAPTER_ANYCAST_ADDRESScollegate a cui punta il membro FirstAnycastAddress e l'ordine delle strutture IP_ADAPTER_MULTICAST_ADDRESS collegate a cui punta il membro FirstMulticastAddress non riflettono l'ordine di aggiunta degli indirizzi IP a una scheda e può variare tra le versioni di Windows.

Inoltre, le strutture di IP_ADAPTER_UNICAST_ADDRESS collegate a cui punta il membro FirstUnicastAddress e le strutture IP_ADAPTER_PREFIX collegate a cui punta il membro FirstPrefix vengono mantenute come elenchi collegati interni separati dal sistema operativo. Di conseguenza, l'ordine delle strutture IP_ADAPTER_UNICAST_ADDRESScollegate a cui punta il membro FirstUnicastAddress non ha alcuna relazione con l'ordine delle strutture IP_ADAPTER_PREFIX collegate a cui punta il membro FirstPrefix.

In Windows Vista e versioni successive, le strutture IP_ADAPTER_PREFIX collegate a cui punta il membro FirstPrefix includono tre prefissi dell'adattatore IP per ogni indirizzo IP assegnato alla scheda. Questi includono il prefisso dell'indirizzo IP host, il prefisso dell'indirizzo IP della subnet e il prefisso dell'indirizzo IP di trasmissione della subnet. Inoltre, per ogni scheda è presente un prefisso di indirizzo multicast e un prefisso di indirizzo di trasmissione.

In Windows XP con SP1 e versioni successive precedenti a Windows Vista, le strutture collegate IP_ADAPTER_PREFIX puntate dal membro FirstPrefix includono solo un singolo prefisso dell'adattatore IP per ogni indirizzo IP assegnato alla scheda.

In Windows SDK la versione della struttura da usare in Windows Vista e versioni successive viene definita come IP_ADAPTER_ADDRESSES_LH. In Microsoft Windows Software Development Kit (SDK), la versione di questa struttura da usare nei sistemi precedenti, inclusi Windows XP con SP1 e versioni successive, viene definita come IP_ADAPTER_ADDRESSES_XP. Quando si compila un'applicazione se la piattaforma di destinazione è Windows Vista e versioni successive (NTDDI_VERSION >= NTDDI_LONGHORN, _WIN32_WINNT >= 0x0600o ), WINVER >= 0x0600la struttura IP_ADAPTER_ADDRESSES_LH viene digitata nella struttura IP_ADAPTER_ADDRESSES . Quando si compila un'applicazione se la piattaforma di destinazione non è Windows Vista e versioni successive, la struttura IP_ADAPTER_ADDRESSES_XP viene digitata nella struttura IP_ADAPTER_ADDRESSES .

La struttura SOCKET_ADDRESS viene usata nella struttura IP_ADAPTER_ADDRESSES . In Windows SDK rilasciato per Windows Vista e versioni successive, l'organizzazione dei file di intestazione è stata modificata e la struttura SOCKET_ADDRESS viene definita nel file di intestazione Ws2def.h che viene automaticamente incluso dal file di intestazione Winsock2.h . Nel Platform Software Development Kit (SDK) rilasciato per Windows Server 2003 e Windows XP, la struttura SOCKET_ADDRESS viene dichiarata nel file di intestazione Winsock2.h . Per usare la struttura IP_ADAPTER_ADDRESSES , il file di intestazione Winsock2.h deve essere incluso prima del file di intestazione Iphlpapi.h .

Esempio

In questo esempio viene recuperata la struttura di IP_ADAPTER_ADDRESSES per gli adattatori associati al sistema e vengono stampati alcuni membri per ogni interfaccia dell'adattatore.

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

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Intestazione iptypes.h (includere Iphlpapi.h)

Vedi anche

GetAdaptersAddresses

IF_OPER_STATUS

Pagina iniziale dell'helper IP

Strutture helper 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