共用方式為


SetIpInterfaceEntry 函式 (netioapi.h)

SetIpInterfaceEntry 函式會在本機電腦上設定IP介面的屬性。

語法

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API SetIpInterfaceEntry(
  [in, out] PMIB_IPINTERFACE_ROW Row
);

參數

[in, out] Row

介面 MIB_IPINTERFACE_ROW 結構專案的指標。 在輸入時,必須將MIB_IPINTERFACE_ROWFamily成員設定為 AF_INET6AF_INET,而且必須指定MIB_IPINTERFACE_ROWInterfaceLuidInterfaceIndex成員。 成功傳回時,如果指定MIB_IPINTERFACE_ROW專案的 InterfaceIndex 成員,則會填入MIB_IPINTERFACE_ROWInterfaceLuid 成員。

傳回值

如果函式成功,傳回值會NO_ERROR。

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

傳回碼 Description
ERROR_ACCESS_DENIED
存取遭到拒絕。 此錯誤會在數種狀況下傳回:使用者缺少本機電腦上的必要系統管理許可權,或應用程式未在增強殼層中執行,因為內建系統管理員 (RunAs 系統管理員) 。
ERROR_FILE_NOT_FOUND
系統找不到指定的檔案。 如果 Row 參數所指向 MIB_IPINTERFACE_ROW之interfaceLuidInterfaceIndex 成員所指定的網路介面 LUID 或介面索引不是本機電腦上的值,就會傳回此錯誤。
ERROR_INVALID_PARAMETER
無效的參數已傳遞至 函式。 如果在 Row 參數中傳遞 NULL 指標、Row 參數所指向之MIB_IPINTERFACE_ROWFamily 成員未指定為AF_INETAF_INET6,或是 Row 參數所指向之MIB_IPINTERFACE_ROWInterfaceLuidInterfaceIndex 成員都未指定,就會傳回這個錯誤。
ERROR_NOT_FOUND
找不到指定的介面。 如果 Row 參數所指向之 MIB_IPINTERFACE_ROW的 InterfaceLuidInterfaceIndex 成員所指定的網路介面不符合 MIB_IPINTERFACE_ROW 結構之 Family 成員中指定的 IP 位址系列,就會傳回此錯誤。
其他
使用 FormatMessage 取得傳回錯誤的訊息字串。

備註

SetIpInterfaceEntry 函式是在 Windows Vista 和更新版本上定義。

SetIpInterfaceEntry 函式可用來修改現有的IP介面專案。

輸入時,Row 參數所指向之MIB_IPINTERFACE_ROW結構中的Family成員必須初始化為 AF_INETAF_INET6。 除了輸入之外,必須初始化指向 Row 參數之MIB_IPINTERFACE_ROW結構中至少一個下列成員:InterfaceLuidInterfaceIndex

欄位會依照上面所列的順序使用。 因此,如果指定 InterfaceLuid ,則會使用此成員來判斷介面。 如果未為 InterfaceLuid 成員設定任何值, (此成員的值設定為零) ,則下一步會使用 InterfaceIndex 成員來判斷介面。

輸出時,如果指定 InterfaceIndex則 Row 參數所指向之MIB_IPINTERFACE_ROW結構的 InterfaceLuid 成員會填入。

呼叫 SetIpInterfaceEntry 函式時,會忽略 Row 所指向之MIB_IPINTERFACE_ROW結構的 MaxReassemblySizeMinRouterAdvertisementIntervalConnectedSupportsWakeUpPatternsSupportsNeighborDiscovery、SupportsRouterDiscoveryReachableTimeTransmitOffload 和 ReceiveOffload 成員MIB_IPINTERFACE_ROW結構。 這些成員是由網路堆疊所設定,而且無法使用 SetIpInterfaceEntry 函式 進行變更。

應用程式通常會呼叫 GetIpInterfaceTable 函式來擷取本機電腦上的IP介面專案,或呼叫 GetIpInterfaceEntry 函式 ,只擷取要修改的IP介面專案。 接著可以修改特定IP介面專案的MIB_IPINTERFACE_ROW結構,以及傳遞至Row參數中 SetIpInterfaceEntry 函式之這個結構的指標。 不過,對於 IPv4,應用程式不得嘗試修改 MIB_IPINTERFACE_ROW 結構的 SitePrefixLength 成員。 針對 IPv4,SitePrefixLength 成員必須設定為 0。

修改現有IP介面專案的另一個可能方法是使用 InitializeIpInterfaceEntry 函式,以預設值初始化 MIB_IPINTERFACE_ROW 結構專案的欄位。 然後,在 Row 參數所指向的 MIB_IPINTERFACE_ROW 結構中設定 Family 成員和 InterfaceIndexInterfaceLuid 成員,以符合要變更的 IP 介面。 應用程式接著可以變更想要修改 之MIB_IPINTERFACE_ROW 專案中的欄位,然後呼叫 SetIpInterfaceEntry 函式 。 不過,對於 IPv4,應用程式不得嘗試修改 MIB_IPINTERFACE_ROW 結構的 SitePrefixLength 成員。 針對 IPv4,SitePrefixLength 成員必須設定為 0。 請注意,必須搭配此方法使用,因為判斷所有變更的欄位的唯一方式是比較特定IP介面專案 MIB_IPINTERFACE_ROW 中的欄位,以及 初始化IpInterfaceEntry 函式在初始化為預設值 MIB_IPINTERFACE_ROW 時所設定的欄位。

不同安全性需求之多個網路的不特殊許可權同時存取會建立安全性漏洞,並允許不特殊許可權的應用程式不小心在兩個網路之間轉寄數據。 典型的範例是同時存取虛擬專用網 (VPN) 和因特網。 Windows Server 2003 和 Windows XP 會使用弱式主機模型,其中 RAS 藉由透過其他介面增加所有預設路由的路由計量來防止這類同時存取。 因此,所有流量都會透過 VPN 介面路由傳送,因而中斷其他網路連線。

在 Windows Vista 和更新版本上,預設會使用強主機模型。 如果使用 GetBestRoute2GetBestRoute 在路由查閱中指定來源 IP 位址,路由查閱會限制為來源 IP 位址的介面。 RAS 修改路由計量沒有任何作用,因為潛在的路由清單甚至沒有 VPN 介面的路由,因此允許流量流向因特網。 MIB_IPINTERFACE_ROWDisableDefaultRoutes 成員可用來停用介面上的預設路由。 當 VPN 用戶端不需要分割通道時,此成員可作為 VPN 用戶端的安全性量值,以限制分割通道。 VPN 用戶端可以呼叫 SetIpInterfaceEntry 函式,視需要將 DisableDefaultRoutes 成員設定為 TRUE 。 VPN 用戶端可以藉由呼叫 GetIpInterfaceEntry 函式來查詢 DisableDefaultRoutes 成員的目前狀態。

The

SetIpInterfaceEntry 函式只能由以 Administrators 群組成員身分登入的使用者呼叫。 如果 SetIpInterfaceEntry 是由不是 Administrators 群組成員的使用者呼叫,則函式呼叫將會失敗,並 傳回ERROR_ACCESS_DENIED 。 此函式也可能因為 Windows Vista 和更新版本上的用戶帳戶控制 (UAC) 而失敗。 如果包含此函式的應用程式是由使用者以系統管理員以外的系統管理員群組成員身分登入來執行,除非應用程式已在指令清單檔中標示為 requestedExecutionLevel 設定為 requireAdministrator,否則此呼叫將會失敗。 如果應用程式缺少此指令清單檔,則身為系統管理員以外的 Administrators 群組成員登入的使用者,就必須在增強殼層中執行應用程式,因為內建系統管理員 (RunAs 系統管理員) ,此函式才能成功。

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 netioapi.h (包括 Iphlpapi.h)
程式庫 Iphlpapi.lib
Dll Iphlpapi.dll

另請參閱

GetBestRoute

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

IP 協助程式函式參考

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange