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_INET と PF_INET)、どちらの定数も使用できます。
Windows Vista 以降およびWindows SDKでは、ヘッダー ファイルのorganizationが変更され、このメンバーの使用可能な値は Ws2def.h ヘッダー ファイルで定義されます。 Ws2def.h ヘッダー ファイルは Winsock2.h に自動的に含まれるので、直接使用しないでください。
現在サポートされている値は 、AF_INET、 AF_INET6、 AF_UNSPECです。
[out] Table
MIB_IPINTERFACE_TABLE構造体の IP インターフェイス エントリのテーブルを受け取るバッファーへのポインター。
戻り値
関数が成功した場合、戻り値はNO_ERROR。
関数が失敗した場合、戻り値は次のいずれかのエラー コードになります。
リターン コード | 説明 |
---|---|
|
無効なパラメーターが関数に渡されました。 このエラーは、Table パラメーターに NULL ポインターが渡された場合、または Family パラメーターがAF_INET、AF_INET6、またはAF_UNSPECとして指定されていない場合に返されます。 |
|
操作を完了するために使用できるメモリ リソースが不足しています。 |
|
Family パラメーターで指定された IP インターフェイス エントリが見つかりませんでした。 |
|
関数はサポートされていません。 このエラーは、 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 |