IP_ADAPTER_INFO 構造体 (iptypes.h)

IP_ADAPTER_INFO構造体には、ローカル コンピューター上の特定のネットワーク アダプターに関する情報が含まれています。

構文

typedef struct _IP_ADAPTER_INFO {
  struct _IP_ADAPTER_INFO *Next;
  DWORD                   ComboIndex;
  char                    AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
  char                    Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
  UINT                    AddressLength;
  BYTE                    Address[MAX_ADAPTER_ADDRESS_LENGTH];
  DWORD                   Index;
  UINT                    Type;
  UINT                    DhcpEnabled;
  PIP_ADDR_STRING         CurrentIpAddress;
  IP_ADDR_STRING          IpAddressList;
  IP_ADDR_STRING          GatewayList;
  IP_ADDR_STRING          DhcpServer;
  BOOL                    HaveWins;
  IP_ADDR_STRING          PrimaryWinsServer;
  IP_ADDR_STRING          SecondaryWinsServer;
  time_t                  LeaseObtained;
  time_t                  LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

メンバー

Next

型: 構造体_IP_ADAPTER_INFO*

アダプターの一覧の次のアダプターへのポインター。

ComboIndex

型: DWORD

予約済み。

AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]

種類: char[MAX_ADAPTER_NAME_LENGTH + 4]

アダプターの名前の ANSI 文字列。

Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

型: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

アダプターの説明を含む ANSI 文字列。

AddressLength

型: UINT

アダプターのハードウェア アドレスの長さ (バイト単位)。

Address[MAX_ADAPTER_ADDRESS_LENGTH]

型: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

BYTE 配列として表されるアダプターのハードウェア アドレス。

Index

型: DWORD

アダプター インデックス。

アダプターのインデックスは、アダプターを無効にしてから有効にした場合、またはその他の状況で変更される可能性があり、永続的と見なすべきではありません。

Type

型: UINT

アダプターの種類。 アダプターの種類に使用できる値は、 Ipifcons.h ヘッダー ファイルに一覧表示されます。

次の表に、アダプターの種類の一般的な値を示しますが、Windows Vista 以降では他の値を使用できます。

説明
MIB_IF_TYPE_OTHER
1
その他の種類のネットワーク インターフェイス。
MIB_IF_TYPE_ETHERNET
6
イーサネット ネットワーク インターフェイス。
IF_TYPE_ISO88025_TOKENRING
9
MIB_IF_TYPE_TOKENRING
MIB_IF_TYPE_PPP
23
PPP ネットワーク インターフェイス。
MIB_IF_TYPE_LOOPBACK
24
ソフトウェア ループバック ネットワーク インターフェイス。
MIB_IF_TYPE_SLIP
28
ATM ネットワーク インターフェイス。
IF_TYPE_IEEE80211
71
IEEE 802.11 ワイヤレス ネットワーク インターフェイス。
メモ このアダプターの種類は、Windows Vista 以降で返されます。 Windows Server 2003 および Windows XP では、IEEE 802.11 ワイヤレス ネットワーク インターフェイスはアダプターの種類の MIB_IF_TYPE_ETHERNETを返します。
 

DhcpEnabled

型: UINT

このアダプターに対して動的ホスト構成プロトコル (DHCP) を有効にするかどうかを指定するオプション値。

CurrentIpAddress

種類: PIP_ADDR_STRING

予約済み。

IpAddressList

種類: IP_ADDR_STRING

このアダプターに関連付けられている IPv4 アドレスの一覧は、 IP_ADDR_STRING 構造体のリンクされたリストとして表されます。 アダプターには複数の IPv4 アドレスを割り当てることができます。

GatewayList

種類: IP_ADDR_STRING

このアダプターのゲートウェイの IPv4 アドレスは、 IP_ADDR_STRING 構造のリンクされたリストとして表されます。 アダプターには、複数の IPv4 ゲートウェイ アドレスを割り当てることができます。 この一覧には、通常、このアダプターの既定のゲートウェイの IPv4 アドレスの 1 つのエントリが含まれています。

DhcpServer

種類: IP_ADDR_STRING

このアダプターの DHCP サーバーの IPv4 アドレスは、 IP_ADDR_STRING 構造のリンクリストとして表されます。 この一覧には、このアダプターの DHCP サーバーの IPv4 アドレスの 1 つのエントリが含まれています。 値 255.255.255.255 は、DHCP サーバーに到達できなかったか、到達処理中であることを示します。

このメンバーは、 DhcpEnabled メンバーが 0 以外の場合にのみ有効です。

HaveWins

種類: BOOL

このアダプターで Windows インターネット ネーム サービス (WINS) を使用するかどうかを指定するオプション値。

PrimaryWinsServer

種類: IP_ADDR_STRING

IP_ADDR_STRING構造のリンクリストとして表されるプライマリ WINS サーバーの IPv4 アドレス。 この一覧には、このアダプターのプライマリ WINS サーバーの IPv4 アドレスの 1 つのエントリが含まれています。

このメンバーは、 HaveWins メンバーが TRUE の場合にのみ有効です。

SecondaryWinsServer

種類: IP_ADDR_STRING

IP_ADDR_STRING構造のリンクされたリストとして表されるセカンダリ WINS サーバーの IPv4 アドレス。 アダプターには、複数のセカンダリ WINS サーバー アドレスを割り当てることができます。

このメンバーは、 HaveWins メンバーが TRUE の場合にのみ有効です。

LeaseObtained

種類: time_t

現在の DHCP リースが取得された時刻。

このメンバーは、 DhcpEnabled メンバーが 0 以外の場合にのみ有効です。

LeaseExpires

種類: time_t

現在の DHCP リースの有効期限が切れる時刻。

このメンバーは、 DhcpEnabled メンバーが 0 以外の場合にのみ有効です。

解説

IP_ADAPTER_INFO構造は、ローカル コンピューター上の特定のネットワーク アダプターに関する IPv4 情報に制限されます。 IP_ADAPTER_INFO構造体は、GetAdaptersInfo 関数を呼び出すことによって取得されます。

Visual Studio 2005 以降を使用する場合、 time_t データ型の既定値は 8 バイトのデータ型であり、32 ビット プラットフォームの LeaseObtained メンバーと LeaseExpires メンバーに使用される 4 バイトデータ型ではありません。 32 ビット プラットフォームで IP_ADAPTER_INFO 構造体を適切に使用するには、アプリケーションをコンパイルするときに _USE_32BIT_TIME_T を定義し (たとえば、オプションとして使用 -D _USE_32BIT_TIME_T )、 time_t データ型を 4 バイトのデータ型に強制します。

Windows XP 以降で使用するために、 IP_ADAPTER_ADDRESSES 構造体には IPv4 と IPv6 の両方の情報が含まれています。 GetAdaptersAddresses 関数は、IPv4 および IPv6 アダプター情報を取得します。

この例では、アダプター情報を取得し、各アダプターのさまざまなプロパティを出力します。

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.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()
{

    /* Declare and initialize variables */

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter. 
//
// Note that this sample code only prints out the 
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter. 

    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    UINT i;

/* variables used to print DHCP time info */
    struct tm newtime;
    char buffer[32];
    errno_t error;

    ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
        return 1;
    }
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        FREE(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
        if (pAdapterInfo == NULL) {
            printf("Error allocating memory needed to call GetAdaptersinfo\n");
            return 1;
        }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
            printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
            printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
            printf("\tAdapter Addr: \t");
            for (i = 0; i < pAdapter->AddressLength; i++) {
                if (i == (pAdapter->AddressLength - 1))
                    printf("%.2X\n", (int) pAdapter->Address[i]);
                else
                    printf("%.2X-", (int) pAdapter->Address[i]);
            }
            printf("\tIndex: \t%d\n", pAdapter->Index);
            printf("\tType: \t");
            switch (pAdapter->Type) {
            case MIB_IF_TYPE_OTHER:
                printf("Other\n");
                break;
            case MIB_IF_TYPE_ETHERNET:
                printf("Ethernet\n");
                break;
            case MIB_IF_TYPE_TOKENRING:
                printf("Token Ring\n");
                break;
            case MIB_IF_TYPE_FDDI:
                printf("FDDI\n");
                break;
            case MIB_IF_TYPE_PPP:
                printf("PPP\n");
                break;
            case MIB_IF_TYPE_LOOPBACK:
                printf("Lookback\n");
                break;
            case MIB_IF_TYPE_SLIP:
                printf("Slip\n");
                break;
            default:
                printf("Unknown type %ld\n", pAdapter->Type);
                break;
            }

            printf("\tIP Address: \t%s\n",
                   pAdapter->IpAddressList.IpAddress.String);
            printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

            printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
            printf("\t***\n");

            if (pAdapter->DhcpEnabled) {
                printf("\tDHCP Enabled: Yes\n");
                printf("\t  DHCP Server: \t%s\n",
                       pAdapter->DhcpServer.IpAddress.String);

                printf("\t  Lease Obtained: ");
                /* Display local time */
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }

                printf("\t  Lease Expires:  ");
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }
            } else
                printf("\tDHCP Enabled: No\n");

            if (pAdapter->HaveWins) {
                printf("\tHave Wins: Yes\n");
                printf("\t  Primary Wins Server:    %s\n",
                       pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("\t  Secondary Wins Server:  %s\n",
                       pAdapter->SecondaryWinsServer.IpAddress.String);
            } else
                printf("\tHave Wins: No\n");
            pAdapter = pAdapter->Next;
            printf("\n");
        }
    } else {
        printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

    }
    if (pAdapterInfo)
        FREE(pAdapterInfo);

    return 0;
}

要件

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

関連項目

GetAdaptersAddresses

GetAdaptersInfo

IP ヘルパーの開始ページ

IP ヘルパー構造体

IP_ADAPTER_ADDRESSES

IP_ADDRESS_STRING

IP_ADDR_STRING