IP_ADAPTER_ADDRESSES_LH 構造体 (iptypes.h)

IP_ADAPTER_ADDRESSES構造体は、特定のアダプターのアドレスのリンクされたリストのヘッダー ノードです。 この構造体は、IP_ADAPTER_ADDRESSES構造のリンクされたリストの一部として同時 使用できます。

構文

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;

メンバー

Alignment

種類: ULONGLONG

予約済み。 構造体を配置するためにコンパイラによって使用されます。

Length

種類: ULONG

この構造体の長さ (バイト単位)。 IP_ADAPTER_ADDRESSES構造の長さは、SP1 以降の Windows XP および Windows Vista 以降でも変更されることに注意してください。

IfIndex

型: DWORD

これらのアドレスが関連付けられている IPv4 インターフェイスのインデックス。 Windows Server 2003 および Windows XP では、IPv4 がインターフェイスで使用できない場合、このメンバーは 0 になります。

Next

型: 構造体_IP_ADAPTER_ADDRESSES*

次のアダプターへのポインターは、リスト内の構造体をアドレス指定します。

AdapterName

種類: PCHAR

これらのアドレスが関連付けられているアダプターの名前を含む文字の配列。 アダプターのフレンドリ名とは異なり、 AdapterName で指定されたアダプター名は永続的であり、ユーザーが変更することはできません。

FirstUnicastAddress

種類: PIP_ADAPTER_UNICAST_ADDRESS

アダプターの IP ユニキャスト アドレスのリンクリスト内の最初の IP_ADAPTER_UNICAST_ADDRESS 構造体へのポインター。

FirstAnycastAddress

種類: PIP_ADAPTER_ANYCAST_ADDRESS

アダプターの IP エニーキャスト アドレスのリンクされたリスト内の最初の IP_ADAPTER_ANYCAST_ADDRESS 構造体へのポインター。

FirstMulticastAddress

種類: PIP_ADAPTER_MULTICAST_ADDRESS

アダプターの IP マルチキャスト アドレスの一覧の最初の IP_ADAPTER_MULTICAST_ADDRESS 構造体へのポインター。

FirstDnsServerAddress

種類: PIP_ADAPTER_DNS_SERVER_ADDRESS

アダプターの DNS サーバー アドレスのリンクリスト内の最初の IP_ADAPTER_DNS_SERVER_ADDRESS 構造体へのポインター。

DnsSuffix

種類: PWCHAR

このアダプターに関連付けられているドメイン ネーム システム (DNS) サフィックス。

Description

種類: PWCHAR

アダプターの説明。 このメンバーは読み取り専用です。

FriendlyName

種類: PWCHAR

アダプターのわかりやすい名前。 たとえば、"ローカル エリア接続 1" です。この名前は、 ipconfig コマンド ライン プログラムや Connection フォルダーなどのコンテキストで表示されます。 このメンバーは読み取り専用であり、IP ヘルパー関数を使用して変更することはできません。

このメンバーは、 RFC 2863 で説明されているように、NDIS で使用される ifAlias フィールドです。 IFAlias フィールドは、NDIS ドライバーのインストール時に NDIS インターフェイス プロバイダーによって設定できます。 NDIS ミニポート ドライバーの場合、このフィールドは NDIS によって設定されます。

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

型: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

アダプターのメディア 存取控制 (MAC) アドレス。 たとえば、イーサネット ネットワークでは、このメンバーはイーサネット ハードウェア アドレスを指定します。

PhysicalAddressLength

型: DWORD

PhysicalAddress メンバーで指定されたアドレスの長さ (バイト単位)。 データ リンク レイヤーを持たないインターフェイスの場合、この値は 0 です。

Flags

型: DWORD

アダプターのさまざまな設定を指定するフラグのセット。 これらの値は 、Iptypes.h ヘッダー ファイルで定義されています。 これらのフラグ ビットの組み合わせが可能です。

フラグ 説明
IP_ADAPTER_DDNS_ENABLED
0x0001
このアダプターでは、動的 DNS が有効になっています。
IP_ADAPTER_REGISTER_ADAPTER_SUFFIX
0x0002
このアダプターの DNS サフィックスを登録します。
IP_ADAPTER_DHCP_ENABLED
0x0004
このアダプターでは、動的ホスト構成プロトコル (DHCP) が有効になっています。
IP_ADAPTER_RECEIVE_ONLY
0x0008
アダプターは受信専用アダプターです。
IP_ADAPTER_NO_MULTICAST
0x0010
アダプターはマルチキャスト受信者ではありません。
IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG
0x0020
アダプターには、その他の IPv6 固有のステートフル構成情報が含まれています。
IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED
0x0040
アダプターは、TCP/IP 経由の NetBIOS に対して有効になっています。
メモ このフラグは、NTDDI バージョンが NTDDI_LONGHORN 以上のターゲット プラットフォームに対してアプリケーションがコンパイルされた場合にのみ、Windows Vista 以降でサポートされます。 このフラグは、 IP_ADAPTER_ADDRESSES_LH 構造体で NetbiosOverTcpipEnabled ビットフィールドとして定義されます。
 
IP_ADAPTER_IPV4_ENABLED
0x0080
アダプターは IPv4 に対して有効になっています。
メモ このフラグは、NTDDI バージョンが NTDDI_LONGHORN 以上のターゲット プラットフォームに対してアプリケーションがコンパイルされた場合にのみ、Windows Vista 以降でサポートされます。 このフラグは、 IP_ADAPTER_ADDRESSES_LH 構造体で Ipv4Enabled ビットフィールドとして定義されます。
 
IP_ADAPTER_IPV6_ENABLED
0x0100
アダプターは IPv6 に対して有効になっています。
メモ このフラグは、NTDDI バージョンが NTDDI_LONGHORN 以上のターゲット プラットフォームに対してアプリケーションがコンパイルされた場合にのみ、Windows Vista 以降でサポートされます。 このフラグは、 IP_ADAPTER_ADDRESSES_LH 構造体で Ipv6Enabled ビットフィールドとして定義されます。
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
アダプターは、IPv6 マネージド アドレス構成に対して有効になっています。
メモ このフラグは、NTDDI バージョンが NTDDI_LONGHORN 以上のターゲット プラットフォームに対してアプリケーションがコンパイルされた場合にのみ、Windows Vista 以降でサポートされます。 このフラグは、 IP_ADAPTER_ADDRESSES_LH 構造体で Ipv6ManagedAddressConfigurationSupported ビットフィールドとして定義されます。
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

型: DWORD

最大伝送単位 (MTU) サイズ (バイト単位)。

IfType

型: DWORD

インターネット割り当て名機関 (IANA) によって定義されたインターフェイス型。 インターフェイスの種類に使用できる値は、 Ipifcons.h ヘッダー ファイルに一覧表示されます。

次の表に、インターフェイス型の一般的な値を示しますが、他の多くの値を使用できます。

説明
IF_TYPE_OTHER
1
その他の種類のネットワーク インターフェイス。
IF_TYPE_ETHERNET_CSMACD
6
イーサネット ネットワーク インターフェイス。
IF_TYPE_ISO88025_TOKENRING
9
トークン リング ネットワーク インターフェイス。
IF_TYPE_PPP
23
PPP ネットワーク インターフェイス。
IF_TYPE_SOFTWARE_LOOPBACK
24
ソフトウェア ループバック ネットワーク インターフェイス。
IF_TYPE_ATM
37
ATM ネットワーク インターフェイス。
IF_TYPE_IEEE80211
71
IEEE 802.11 ワイヤレス ネットワーク インターフェイス。

Windows Vista 以降では、ワイヤレス ネットワーク カードは IF_TYPE_IEEE80211として報告されます。 以前のバージョンの Windows では、ワイヤレス ネットワーク カードは IF_TYPE_ETHERNET_CSMACDとして報告されます。

SP3 を使用する Windows XP と SP2 x86 がインストールされた Windows XP の場合は、Windows XP 用ワイヤレス LAN API と SP2 がインストールされている Windows XP では、 WlanEnumInterfaces 関数を使用して、ローカル コンピューター上のワイヤレス インターフェイスを列挙できます。

IF_TYPE_TUNNEL
131
トンネル型カプセル化ネットワーク インターフェイス。
IF_TYPE_IEEE1394
144
IEEE 1394 (Firewire) の高性能シリアル バス ネットワーク インターフェイス。

OperStatus

種類: IF_OPER_STATUS

RFC 2863 で定義されているインターフェイスの動作状態。 詳細については、「http://www.ietf.org/rfc/rfc2863.txt」を参照してください。 このメンバーは、Iftypes.h ヘッダー ファイルで定義されているIF_OPER_STATUS列挙型の値のいずれかになります。 Windows Vista 以降では、ヘッダー ファイルが再構成され、この列挙は Ifdef.h ヘッダー ファイルで定義されています。

説明
IfOperStatusUp
1
インターフェイスが稼働しており、パケットを渡すことができます。
IfOperStatusDown
2
インターフェイスはダウンしており、パケットを渡す条件ではありません。 IfOperStatusDown 状態には、AdminStatus メンバーの値に応じて 2 つの意味があります。 AdminStatusNET_IF_ADMIN_STATUS_DOWN に設定されておらず、ifOperStatus が IfOperStatusDown設定されている場合、インターフェイスにエラー状態が存在すると推定されます。 AdminStatusIfOperStatusDown に設定されている場合、ifOperStatus は通常、IfOperStatusDown または IfOperStatusNotPresent にも設定され、インターフェイスに必ずしも障害状態が存在するとは限りません。
IfOperStatusTesting
3
インターフェイスはテスト モードです。
IfOperStatusUnknown
4
インターフェイスの動作状態が不明です。
IfOperStatusDormant
5
インターフェイスは実際にはパケットを渡す状態ではありません (起動していません)、何らかの外部イベントを待機している保留中の状態です。 オンデマンド インターフェイスの場合、この新しい状態は、イベントが IfOperStatusUp 状態に配置されるのをインターフェイスが待機している状況を識別します。
IfOperStatusNotPresent
6
IfOperStatusDown 状態の絞り込み。これは、一部のコンポーネント (通常はハードウェア コンポーネント) がマネージド システムに存在しないため、関連するインターフェイスがダウンしていることを示します。
IfOperStatusLowerLayerDown
7
IfOperStatusDown 状態の絞り込み。 この新しい状態は、このインターフェイスが 1 つ以上の他のインターフェイスの上で実行され、特にこれらの下位レイヤー インターフェイスの 1 つ以上がダウンしているために、このインターフェイスがダウンしていることを示します。

Ipv6IfIndex

型: DWORD

IPv6 IP アドレスのインターフェイス インデックス。 インターフェイスで IPv6 が使用できない場合、このメンバーは 0 です。

メモ この構造体メンバーは、SP1 以降の Windows XP でのみ使用できます。
 

ZoneIndices[16]

種類: DWORD[16]

sockaddr 構造体の作成に使用される各スコープ レベルのスコープ ID の配列。 SCOPE_LEVEL列挙は、配列のインデックスを作成するために使用されます。 IPv6 では、スコープ ID に基づいて、1 つのインターフェイスに複数の IPv6 マルチキャスト アドレスを割り当てることができます。

メモ この構造体メンバーは、SP1 以降の Windows XP でのみ使用できます。
 

FirstPrefix

種類: PIP_ADAPTER_PREFIX

アダプターの IP アダプター プレフィックスのリンクされたリスト内の最初の IP_ADAPTER_PREFIX 構造体へのポインター。

メモ この構造体メンバーは、SP1 以降の Windows XP でのみ使用できます。
 

TransmitLinkSpeed

種類: ULONG64

アダプターの送信リンクの現在の速度 (ビット/秒)。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

ReceiveLinkSpeed

種類: ULONG64

アダプターの受信リンクの現在の速度 (ビット/秒)。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

FirstWinsServerAddress

種類: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

アダプターの Windows インターネット ネーム サービス (WINS) サーバー アドレスのリンクリスト内の最初の IP_ADAPTER_WINS_SERVER_ADDRESS 構造体へのポインター。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

FirstGatewayAddress

種類: PIP_ADAPTER_GATEWAY_ADDRESS_LH

アダプターのゲートウェイのリンクされたリスト内の最初の IP_ADAPTER_GATEWAY_ADDRESS 構造体へのポインター。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Ipv4Metric

種類: ULONG

アダプター アドレスの IPv4 インターフェイス メトリック。 このメンバーは、IPv4 アダプター アドレスにのみ適用されます。

IPv4 のルート設定を計算するために使用される実際のルート メトリックは、MIB_IPFORWARD_ROW2構造の Metric メンバーで指定されたルート メトリック オフセットと、このメンバーで IPv4 用に指定されたインターフェイス メトリックの合計です。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Ipv6Metric

種類: ULONG

アダプター アドレスの IPv6 インターフェイス メトリック。 このメンバーは、IPv6 アダプター アドレスにのみ適用されます。

IPv6 のルート設定の計算に使用される実際のルート メトリックは、MIB_IPFORWARD_ROW2構造の Metric メンバーで指定されたルート メトリック オフセットと、このメンバーで IPv4 用に指定されたインターフェイス メトリックの合計です。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Luid

種類: IF_LUID

アダプター アドレスのインターフェイス LUID。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Dhcpv4Server

種類: SOCKET_ADDRESS

アダプター アドレスの DHCP サーバーの IPv4 アドレス。 このメンバーは、DHCP を使用して構成された IPv4 アダプター アドレスにのみ適用されます。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

CompartmentId

種類: NET_IF_COMPARTMENT_ID

アダプター アドレスのルーティング コンパートメント ID。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。 このメンバーは現在サポートされておらず、今後の使用のために予約されています。
 

NetworkGuid

種類: NET_IF_NETWORK_GUID

インターフェイスが属しているネットワークに関連付けられている GUID

インターフェイス プロバイダーがネットワーク GUID を提供できない場合、このメンバーは 0 GUID にすることができます。 この場合、インターフェイスは NDIS によって既定のネットワークに登録されました。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

ConnectionType

種類: NET_IF_CONNECTION_TYPE

アダプター アドレスのインターフェイス接続の種類。

このメンバーは、Ifdef.h ヘッダー ファイルで定義されているNET_IF_CONNECTION_TYPE列挙型の値のいずれかになります。

説明
NET_IF_CONNECTION_DEDICATED
1
接続の種類は専用です。 メディアセンスが TRUE の場合、接続は自動的に起動します。 たとえば、イーサネット接続は専用です。
NET_IF_CONNECTION_PASSIVE
2
接続の種類はパッシブです。 リモート・エンドは、ローカル・ステーションへの接続を起動する必要があります。 たとえば、RAS インターフェイスはパッシブです。
NET_IF_CONNECTION_DEMAND
3
接続の種類は demand-dial です。 この種類の接続は、ローカル アクション (パケットの送信など) に応答して発生します。
NET_IF_CONNECTION_MAXIMUM
4
NET_IF_CONNECTION_TYPE列挙型に指定できる最大値。 これは ConnectionType メンバーの有効な値ではありません。
 
メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

TunnelType

種類: TUNNEL_TYPE

アダプター アドレスがトンネルの場合にトンネルによって使用されるカプセル化方法。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 
トンネルの種類は、インターネット割り当て名機関 (IANA) によって定義されます。 詳細については、「http://www.iana.org/assignments/ianaiftype-mib」を参照してください。 このメンバーは、Ifdef.h ヘッダー ファイルで定義されているTUNNEL_TYPE列挙型の値のいずれかになります。
説明
TUNNEL_TYPE_NONE
0
トンネルではありません。
TUNNEL_TYPE_OTHER
1
次のトンネルの種類はありません。
TUNNEL_TYPE_DIRECT
2
パケットは、中間ヘッダーなしで通常の IP ヘッダー内に直接カプセル化され、リモート トンネル エンドポイントへのユニキャストが含まれます。
TUNNEL_TYPE_6TO4
11
IPv6 パケットは中間ヘッダーなしで IPv4 ヘッダー内に直接カプセル化され、6to4 プロトコルによって決定された宛先へのユニキャスト。
TUNNEL_TYPE_ISATAP
13
IPv6 パケットは、中間ヘッダーなしで IPv4 ヘッダー内に直接カプセル化され、ISATAP プロトコルによって決定された宛先へのユニキャストが含まれます。
TUNNEL_TYPE_TEREDO
14
IPv6 パケットの Teredo カプセル化。
TUNNEL_TYPE_IPHTTPS
15
IPv6 パケットの IP over HTTPS カプセル化。
メモ この列挙値は、Windows 7、Windows Server 2008 R2 以降でのみ使用できます。
 

Dhcpv6Server

種類: SOCKET_ADDRESS

アダプター アドレスの DHCPv6 サーバーの IPv6 アドレス。 このメンバーは、DHCPv6 を使用して構成された IPv6 アダプター アドレスにのみ適用されます。 この構造体メンバーは現在サポートされておらず、今後の使用のために予約されています。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

種類: BYTE[MAX_DHCPV6_DUID_LENGTH]

DHCPv6 クライアントの DHCP 一意識別子 (DUID)。 このメンバーは、DHCPv6 を使用して構成された IPv6 アダプター アドレスにのみ適用されます。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Dhcpv6ClientDuidLength

種類: ULONG

DHCPv6 クライアントの DHCP 一意識別子 (DUID) の長さ (バイト単位)。 このメンバーは、DHCPv6 を使用して構成された IPv6 アダプター アドレスにのみ適用されます。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

Dhcpv6Iaid

種類: ULONG

DHCPv6 クライアントによって選択された ID 関連付けの識別子。 このメンバーは、DHCPv6 を使用して構成された IPv6 アダプター アドレスにのみ適用されます。

メモ この構造体メンバーは、Windows Vista 以降でのみ使用できます。
 

FirstDnsSuffix

種類: PIP_ADAPTER_DNS_SUFFIX

アダプターの DNS サフィックスのリンクされたリスト内の最初の IP_ADAPTER_DNS_SUFFIX 構造体へのポインター。

メモ この構造体メンバーは、SP1 以降および Windows Server 2008 以降の Windows Vista でのみ使用できます。
 

解説

GetAdaptersAddresses 関数は、IPv4 アドレスと IPv6 アドレスの情報を取得し、この情報をIP_ADAPTER_ADDRESSES構造体のリンクされたリストとして返します

IfIndex メンバーと Ipv6IfIndex メンバーで指定されたアダプター インデックス値は、アダプターが無効になった後に有効になった場合、またはその他の状況で変更される可能性があり、永続的と見なすべきではありません。

IfType メンバーの値は、Ipifcons.h ヘッダー ファイルで定義されます。 IfType メンバーの説明に記載されている使用可能な値のみが現在サポートされています。

SP1 以降の Windows XP では 、IP_ADAPTER_ADDRESSES 構造のサイズが変更されました。 IP_ADAPTER_ADDRESSES構造のサイズも Windows Vista 以降で変更されました。 IP_ADAPTER_ADDRESSES構造のサイズは、SP1 以降の Windows Vista および Windows Server 2008 以降でも変更されました。 Length メンバーを使用して、使用されているIP_ADAPTER_ADDRESSES構造体のバージョンを確認する必要があります。

SP1 以降の Windows XP の IP_ADAPTER_ADDRESSES 構造のバージョンには、 Ipv6IfIndexZoneIndicesFirstPrefix という新しいメンバーが追加されています。

Windows Vista 以降のIP_ADAPTER_ADDRESSES構造のバージョンには、TransmitLinkSpeedReceiveLinkSpeedFirstWinsServerAddressFirstGatewayAddressIpv4MetricIpv6MetricLuidDhcpv4ServerCompartmentIdNetworkGuidConnectionType、TunnelTypeDhcpv6Server、Dhcpv6ClientDuid、という新しいメンバーが追加されています。Dhcpv6ClientDuidLength および Dhcpv6Iaid

SP1 以降および Windows Server 2008 以降の Windows Vista 上の IP_ADAPTER_ADDRESSES 構造のバージョンには、 FirstDnsSuffix という新しいメンバーが追加されています。

Ipv4Metric および Ipv6Metric メンバーは、ローカル コンピューター上の複数のインターフェイスに接続されているルートのルート メトリックに優先順位を付けるために使用されます。

GetAdaptersAddresses 関数によって返される FirstUnicastAddress メンバーが指すリンクされたIP_ADAPTER_UNICAST_ADDRESS構造体の順序は、IP アドレスがアダプターに追加された順序を反映せず、Windows のバージョンによって異なる場合があります。 同様に、FirstAnycastAddress メンバーが指すリンクされたIP_ADAPTER_ANYCAST_ADDRESS構造体の順序と、FirstMulticastAddress メンバーが指すリンクされたIP_ADAPTER_MULTICAST_ADDRESS構造体の順序は、IP アドレスがアダプターに追加された順序を反映せず、Windows のバージョンによって異なる場合があります。

さらに、FirstUnicastAddress メンバーが指すリンクされたIP_ADAPTER_UNICAST_ADDRESS構造体と、FirstPrefix メンバーが指すリンクされたIP_ADAPTER_PREFIX構造体は、オペレーティング システムによって個別の内部リンク リストとして保持されます。 その結果、FirstUnicastAddress メンバーが指すリンクされたIP_ADAPTER_UNICAST_ADDRESS構造体の順序は、FirstPrefix メンバーが指すリンクされたIP_ADAPTER_PREFIX構造体の順序と関係がありません。

Windows Vista 以降では、FirstPrefix メンバーが指すリンクされたIP_ADAPTER_PREFIX構造には、アダプターに割り当てられた各 IP アドレスに対して 3 つの IP アダプター プレフィックスが含まれます。 これには、ホスト IP アドレス プレフィックス、サブネット IP アドレス プレフィックス、サブネット ブロードキャスト IP アドレス プレフィックスが含まれます。 さらに、アダプターごとにマルチキャスト アドレス プレフィックスとブロードキャスト アドレス プレフィックスがあります。

Windows Vista より前の SP1 以降の Windows XP では、FirstPrefix メンバーが指すリンクされたIP_ADAPTER_PREFIX構造には、アダプターに割り当てられた IP アドレスごとに 1 つの IP アダプター プレフィックスのみが含まれます。

Windows SDK では、Windows Vista 以降で使用する構造体のバージョンは 、IP_ADAPTER_ADDRESSES_LHとして定義されます。 Microsoft Windows Software Development Kit (SDK) では、SP1 以降の Windows XP を含む以前のシステムで使用されるこの構造のバージョンは 、IP_ADAPTER_ADDRESSES_XPとして定義されています。 ターゲット プラットフォームが Windows Vista 以降 (NTDDI_VERSION >= NTDDI_LONGHORN、、または WINVER >= 0x0600) の場合にアプリケーションをコンパイルする場合、_WIN32_WINNT >= 0x0600IP_ADAPTER_ADDRESSES_LH構造体は IP_ADAPTER_ADDRESSES 構造体に型定義されます。 ターゲット プラットフォームが Windows Vista 以降でない場合にアプリケーションをコンパイルする場合、 IP_ADAPTER_ADDRESSES_XP 構造体は IP_ADAPTER_ADDRESSES 構造体に型定義されます。

SOCKET_ADDRESS構造体は、IP_ADAPTER_ADDRESSES構造体で使用されます。 Windows Vista 以降用にリリースされた Windows SDK では、ヘッダー ファイルのorganizationが変更され、SOCKET_ADDRESS構造は、Winsock2.h ヘッダー ファイルによって自動的に含まれる Ws2def.h ヘッダー ファイルで定義されます。 Windows Server 2003 および Windows XP 用にリリースされたプラットフォーム ソフトウェア開発キット (SDK) では、 SOCKET_ADDRESS 構造が Winsock2.h ヘッダー ファイルで宣言されています。 IP_ADAPTER_ADDRESSES構造体を使用するには、Iphlpapi.h ヘッダー ファイルの前に Winsock2.h ヘッダー ファイルを含める必要があります。

次の使用例は、システムに関連付けられているアダプターの IP_ADAPTER_ADDRESSES 構造を取得し、各アダプター インターフェイスのメンバーを出力します。

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

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header iptypes.h (Iphlpapi.h を含む)

関連項目

GetAdaptersAddresses

IF_OPER_STATUS

IP ヘルパーの開始ページ

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