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_ROW的Family成員設定為 AF_INET6或 AF_INET,而且必須指定MIB_IPINTERFACE_ROW的InterfaceLuid或InterfaceIndex成員。 成功傳回時,如果指定MIB_IPINTERFACE_ROW專案的 InterfaceIndex 成員,則會填入MIB_IPINTERFACE_ROW的 InterfaceLuid 成員。
傳回值
如果函式成功,傳回值會NO_ERROR。
如果函式失敗,傳回值就是下列其中一個錯誤碼。
傳回碼 | Description |
---|---|
|
存取遭到拒絕。 此錯誤會在數種狀況下傳回:使用者缺少本機電腦上的必要系統管理許可權,或應用程式未在增強殼層中執行,因為內建系統管理員 (RunAs 系統管理員) 。 |
|
系統找不到指定的檔案。 如果 Row 參數所指向 MIB_IPINTERFACE_ROW之interfaceLuid 或 InterfaceIndex 成員所指定的網路介面 LUID 或介面索引不是本機電腦上的值,就會傳回此錯誤。 |
|
無效的參數已傳遞至 函式。 如果在 Row 參數中傳遞 NULL 指標、Row 參數所指向之MIB_IPINTERFACE_ROW的 Family 成員未指定為AF_INET或AF_INET6,或是 Row 參數所指向之MIB_IPINTERFACE_ROW的 InterfaceLuid 或 InterfaceIndex 成員都未指定,就會傳回這個錯誤。 |
|
找不到指定的介面。 如果 Row 參數所指向之 MIB_IPINTERFACE_ROW的 InterfaceLuid 或 InterfaceIndex 成員所指定的網路介面不符合 MIB_IPINTERFACE_ROW 結構之 Family 成員中指定的 IP 位址系列,就會傳回此錯誤。 |
|
使用 FormatMessage 取得傳回錯誤的訊息字串。 |
備註
SetIpInterfaceEntry 函式是在 Windows Vista 和更新版本上定義。
SetIpInterfaceEntry 函式可用來修改現有的IP介面專案。
輸入時,Row 參數所指向之MIB_IPINTERFACE_ROW結構中的Family成員必須初始化為 AF_INET 或 AF_INET6。 除了輸入之外,必須初始化指向 Row 參數之MIB_IPINTERFACE_ROW結構中至少一個下列成員:InterfaceLuid 或 InterfaceIndex。
欄位會依照上面所列的順序使用。 因此,如果指定 InterfaceLuid ,則會使用此成員來判斷介面。 如果未為 InterfaceLuid 成員設定任何值, (此成員的值設定為零) ,則下一步會使用 InterfaceIndex 成員來判斷介面。
輸出時,如果指定 InterfaceIndex,則 Row 參數所指向之MIB_IPINTERFACE_ROW結構的 InterfaceLuid 成員會填入。
呼叫 SetIpInterfaceEntry 函式時,會忽略 Row 所指向之MIB_IPINTERFACE_ROW結構的 MaxReassemblySize、MinRouterAdvertisementInterval、Connected、SupportsWakeUpPatterns、SupportsNeighborDiscovery、SupportsRouterDiscovery、ReachableTime、TransmitOffload 和 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 成員和 InterfaceIndex 或 InterfaceLuid 成員,以符合要變更的 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 和更新版本上,預設會使用強主機模型。 如果使用 GetBestRoute2 或 GetBestRoute 在路由查閱中指定來源 IP 位址,路由查閱會限制為來源 IP 位址的介面。 RAS 修改路由計量沒有任何作用,因為潛在的路由清單甚至沒有 VPN 介面的路由,因此允許流量流向因特網。 MIB_IPINTERFACE_ROW的 DisableDefaultRoutes 成員可用來停用介面上的預設路由。 當 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 |