IP_ADAPTER_ADDRESSES_XP構造体 (iptypes.h)

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

構文

typedef struct _IP_ADAPTER_ADDRESSES_XP {
  union {
    ULONGLONG Alignment;
    struct {
      ULONG Length;
      DWORD IfIndex;
    };
  };
  struct _IP_ADAPTER_ADDRESSES_XP   *Next;
  PCHAR                             AdapterName;
  PIP_ADAPTER_UNICAST_ADDRESS_XP    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];
  DWORD                             PhysicalAddressLength;
  DWORD                             Flags;
  DWORD                             Mtu;
  DWORD                             IfType;
  IF_OPER_STATUS                    OperStatus;
  DWORD                             Ipv6IfIndex;
  DWORD                             ZoneIndices[16];
  PIP_ADAPTER_PREFIX_XP             FirstPrefix;
} IP_ADAPTER_ADDRESSES_XP, *PIP_ADAPTER_ADDRESSES_XP;

メンバー

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 ビットフィールドとして定義されます。
 

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 でのみ使用できます。
 

解説

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 GetAdapters Addresses 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