共用方式為


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 上,頭文件的組織已變更,而且此成員的可能值定義在 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。

如果函式失敗,傳回值就是下列其中一個錯誤碼。

傳回碼 Description
ERROR_INVALID_PARAMETER
無效的參數已傳遞至 函式。 如果在 Table 參數中傳遞 NULL 指標,或 Family 參數未指定為 AF_INETAF_INET6AF_UNSPEC,則會傳回此錯誤。
ERROR_NOT_ENOUGH_MEMORY
記憶體資源不足,無法完成作業。
ERROR_NOT_FOUND
找不到 Family 參數中指定的 IP 介面專案。
ERROR_NOT_SUPPORTED
不支援函式。 如果未在本機計算機上設定 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_INETAF_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

另請參閱

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

IP 協助程式函式參考

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange