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 上,頭文件的組織已變更,而且此成員的可能值定義在 Ws2def.h 頭檔中。 請注意, Ws2def.h 頭文件會自動包含在 Winsock2.h 中,不應該直接使用。
目前支援的值是 AF_INET、 AF_INET6和 AF_UNSPEC。
值 | 意義 |
---|---|
|
未指定位址系列。 指定此參數時, GetIpInterfaceTable 函式會傳回包含 IPv4 和 IPv6 專案的 IP 介面數據表。 |
|
因特網通訊協定第 4 版 (IPv4) 位址系列。 |
|
因特網通訊協定第 6 版 (IPv6) 位址系列。 |
[out] Table
緩衝區的指標,接收 MIB_IPINTERFACE_TABLE 結構中的IP介面專案數據表。
傳回值
如果函式成功,傳回值會NO_ERROR。
如果函式失敗,傳回值就是下列其中一個錯誤碼。
傳回碼 | Description |
---|---|
|
無效的參數已傳遞至 函式。 如果在 Table 參數中傳遞 NULL 指標,或 Family 參數未指定為 AF_INET、AF_INET6 或 AF_UNSPEC,則會傳回此錯誤。 |
|
記憶體資源不足,無法完成作業。 |
|
找不到 Family 參數中指定的 IP 介面專案。 |
|
不支援函式。 如果未在本機計算機上設定 Address 參數中指定的 IP 傳輸,就會傳回此錯誤。 這個錯誤也會在不支援此函式的 Windows 版本上傳回。 |
|
使用 FormatMessage 函式來取得傳回錯誤的訊息字串。 |
備註
GetIpInterfaceTable 函式是在 Windows Vista 和更新版本上定義。
The
GetIpInterfaceTable 函式會列舉本機系統上的IP介面,並在 MIB_IPINTERFACE_TABLE 結構中傳回這項資訊。
IP 介面專案會在 Table 參數指向的緩衝區中傳回MIB_IPINTERFACE_TABLE結構。 MIB_IPINTERFACE_TABLE 結構包含IP介面專案計數,以及每個IP介面專案的MIB_IPINTERFACE_ROW結構數位。 當不再需要這些傳回的結構時,請呼叫 FreeMibTable釋放記憶體。
Family 參數必須初始化為 AF_INET 或 AF_INET6。
請注意,Table 參數所指向的傳回MIB_IPINTERFACE_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) |
程式庫 | Iphlpapi.lib |
Dll | Iphlpapi.dll |