GetIpInterfaceTable 関数 (netioapi.h)

GetIpInterfaceTable 関数は、ローカル コンピューター上の IP インターフェイス エントリを取得します。

構文

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
  [in]  ADDRESS_FAMILY         Family,
  [out] PMIB_IPINTERFACE_TABLE *Table
);

パラメーター

[in] Family

取得する IP インターフェイスのアドレス ファミリ。

アドレス ファミリに使用できる値は、 Winsock2.h ヘッダー ファイルに一覧表示されます。 AF_ アドレス ファミリ定数とPF_ プロトコル ファミリ定数の値は同一であるため ( たとえば、AF_INETPF_INET)、どちらの定数も使用できます。

Windows Vista 以降およびWindows SDKでは、ヘッダー ファイルのorganizationが変更され、このメンバーの使用可能な値は Ws2def.h ヘッダー ファイルで定義されます。 Ws2def.h ヘッダー ファイルは Winsock2.h に自動的に含まれるので、直接使用しないでください。

現在サポートされている値は 、AF_INETAF_INET6AF_UNSPECです。

意味
AF_UNSPEC
0
アドレス ファミリが指定されていません。 このパラメーターを指定すると、 GetIpInterfaceTable 関数は、IPv4 エントリと IPv6 エントリの両方を含む IP インターフェイス テーブルを返します。
AF_INET
2
インターネット プロトコル バージョン 4 (IPv4) アドレス ファミリ。
AF_INET6
23
インターネット プロトコル バージョン 6 (IPv6) アドレス ファミリ。

[out] Table

MIB_IPINTERFACE_TABLE構造体の IP インターフェイス エントリのテーブルを受け取るバッファーへのポインター。

戻り値

関数が成功した場合、戻り値はNO_ERROR。

関数が失敗した場合、戻り値は次のいずれかのエラー コードになります。

リターン コード 説明
ERROR_INVALID_PARAMETER
無効なパラメーターが関数に渡されました。 このエラーは、Table パラメーターに NULL ポインターが渡された場合、または Family パラメーターがAF_INET、AF_INET6、またはAF_UNSPECとして指定されていない場合返されます。
ERROR_NOT_ENOUGH_MEMORY
操作を完了するために使用できるメモリ リソースが不足しています。
ERROR_NOT_FOUND
Family パラメーターで指定された IP インターフェイス エントリが見つかりませんでした。
ERROR_NOT_SUPPORTED
関数はサポートされていません。 このエラーは、 Address パラメーターで指定された IP トランスポートがローカル コンピューターで構成されていない場合に返されます。 このエラーは、この関数がサポートされていない Windows のバージョンでも返されます。
その他
FormatMessage 関数を使用して、返されたエラーのメッセージ文字列を取得します。

注釈

GetIpInterfaceTable 関数は、Windows Vista 以降で定義されています。

次に、
GetIpInterfaceTable 関数は、ローカル システム上の IP インターフェイスを列挙し、この情報を MIB_IPINTERFACE_TABLE 構造体で返します。

IP インターフェイス エントリは、Table パラメーターによって指されるバッファー内のMIB_IPINTERFACE_TABLE構造体で返されます。 MIB_IPINTERFACE_TABLE構造体には、IP インターフェイス エントリ数と、各 IP インターフェイス エントリのMIB_IPINTERFACE_ROW構造体の配列が含まれています。 これらの返される構造体が不要になったら、 FreeMibTable を呼び出してメモリを解放します。

Family パラメーターは、AF_INETまたはAF_INET6に初期化する必要があります。

返されるMIB_IPINTERFACE_TABLE構造体が Table パラメーターによって指し示されている場合、NumEntries メンバーと、MIB_IPINTERFACE_TABLE 構造体の Table メンバー内の最初のMIB_IPINTERFACE_ROW配列エントリとの間の配置のためのパディング含まれる場合があることに注意してください。 配置のためのパディングは、 MIB_IPINTERFACE_ROW 配列エントリ間に存在する場合もあります。 MIB_IPINTERFACE_ROW配列エントリへのアクセスは、パディングが存在する可能性があることを前提とする必要があります。

次の例では、IP インターフェイス テーブルを取得し、そのテーブル内の IP インターフェイス エントリのいくつかのメンバーの値を出力します。

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "iphlpapi.lib")

int main()
{
    // Declare and initialize variables

    int i;

    DWORD dwRetVal = 0;

    PMIB_IPINTERFACE_TABLE pipTable = NULL;

    dwRetVal = GetIpInterfaceTable(AF_UNSPEC, &pipTable);
    if (dwRetVal != NO_ERROR) {
        printf("GetIpInterfaceTable returned error: %ld\n", dwRetVal);
        exit(1);
    }
    // Print some variables from the rows in the table
    printf("Number of table entries: %d\n\n", pipTable->NumEntries);

    for (i = 0; i < (int) pipTable->NumEntries; i++) {
        printf("Address Family[%d]:\t\t", i);
        switch (pipTable->Table[i].Family) {
        case AF_INET:
            printf("IPv4\n");
            break;
        case AF_INET6:
            printf("IPv6\n");
            break;
        default:
            printf("Other: %d\n", pipTable->Table[i].Family);
            break;
        }

        printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
               i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);

        printf("Interface LUID IfType[%d]:\t ", i);
        switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
        case IF_TYPE_OTHER:
            printf("Other\n");
            break;
        case IF_TYPE_ETHERNET_CSMACD:
            printf("Ethernet\n");
            break;
        case IF_TYPE_ISO88025_TOKENRING:
            printf("Token ring\n");
            break;
        case IF_TYPE_PPP:
            printf("PPP\n");
            break;
        case IF_TYPE_SOFTWARE_LOOPBACK:
            printf("Software loopback\n");
            break;
        case IF_TYPE_ATM:
            printf("ATM\n");
            break;
        case IF_TYPE_IEEE80211:
            printf("802.11 wireless\n");
            break;
        case IF_TYPE_TUNNEL:
            printf("Tunnel encapsulation\n");
            break;
        case IF_TYPE_IEEE1394:
            printf("IEEE 1394 (Firewire)\n");
            break;
        default:
            printf("Unknown: %d\n",
                   pipTable->Table[i].InterfaceLuid.Info.IfType);
            break;
        }
        printf("Interface Index[%d]:\t\t %lu\n",
               i, pipTable->Table[i].InterfaceIndex);
        printf("Maximum reassembly size[%d]:\t %lu\n", i,
               pipTable->Table[i].MaxReassemblySize);

        printf("Advertising enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].AdvertisingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Forwarding enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].ForwardingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Network layer MTU[%d]:\t\t %lu\n", i, pipTable->Table[i].NlMtu);

        printf("Connected[%d]:\t\t\t ", i);
        if (pipTable->Table[i].Connected)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports wakeup patterns[%d]:\t ", i);
        if (pipTable->Table[i].SupportsWakeUpPatterns)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports neighbor discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsNeighborDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports router discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsRouterDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("\n");
    }

    FreeMibTable(pipTable);
    pipTable = NULL;

    exit(0);
}


要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー netioapi.h (Iphlpapi.h を含む)
Library Iphlpapi.lib
[DLL] Iphlpapi.dll

こちらもご覧ください

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

IP ヘルパー関数リファレンス

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange