SetIpInterfaceEntry 函数

SetIpInterfaceEntry 函数设置本地计算机上 IP 接口的属性。

语法

NETIOAPI_API SetIpInterfaceEntry(
  _Inout_ PMIB_IPINTERFACE_ROW Row
);

参数

  • [in, out]
    指向接口 MIB_IPINTERFACE_ROW 结构条目的指针。 输入时,驱动程序必须将MIB_IPINTERFACE_ROW的 Family 成员设置为 AF_INET6 或 AF_INET 并且驱动程序必须指定 MIB_IPINTERFACE_ROW 的 InterfaceLuid 成员或 InterfaceIndex 成员。 成功返回后,如果指定了MIB_IPINTERFACE_ROW项的 InterfaceIndex 成员,则填充MIB_IPINTERFACE_ROW的 InterfaceLuid 成员。

返回值

如果函数成功,SetIpInterfaceEntry 将返回STATUS_SUCCESS。

如果函数失败, SetIpInterfaceEntry 将返回以下错误代码之一:

返回代码 说明
STATUS_INVALID_PARAMETER

向该函数传递了无效参数。 如果在 Row 参数中传递 NULL 指针,Row 参数指向的 MIB_IPINTERFACE_ROW 结构的 Family 成员未指定为 AF_INET 或 AF_INET6,或者未指定 MIB_IPINTERFACE_ROW 结构的 InterfaceLuidInterfaceIndex 成员,则返回此错误。

STATUS_NOT_FOUND

找不到指定的接口。 如果函数找不到 Row 参数指向的 MIB_IPINTERFACE_ROW 结构的 InterfaceLuidInterfaceIndex 成员指定的网络接口,则返回此错误。

其他

使用 FormatMessage 函数获取返回错误的消息字符串。

注解

驱动程序必须使用 InitializeIpInterfaceEntry 函数来使用默认值初始化 MIB_IPINTERFACE_ROW 结构条目的字段。 然后,驱动程序可以更改要修改的MIB_IPINTERFACE_ROW条目中的字段,然后调用 SetIpInterfaceEntry 函数。

输入时,驱动程序必须初始化 Row 参数指向的MIB_IPINTERFACE_ROW结构的以下成员。

  • 系列
    设置为 AF_INET 或 AF_INET6。

  • InterfaceLuidInterfaceIndex
    这些成员按前面列出的顺序使用。 因此,如果指定 了 InterfaceLuid ,则此成员用于确定接口。 如果没有为 InterfaceLuid 成员设置值 (此成员的值设置为零) ,则接下来使用 InterfaceIndex 成员来确定接口。

在输出中,如果指定了 InterfaceIndex,则填充 Row 参数指向的 MIB_IPINTERFACE_ROW 结构的 InterfaceLuid 成员。

SetIpInterfaceEntry 忽略 Row 参数指向的 MIB_IPINTERFACE_ROW 结构的 MaxReassemblySizeMinRouterAdvertisementIntervalMaxRouterAdvertisementIntervalConnectedSupportsWakeUpPatternsSupportsNeighborDiscoverySupportsRouterDiscoveryReachableTimeTransmitOffloadReceiveOffload 成员。 这些成员由网络堆栈设置,无法使用 SetIpInterfaceEntry 函数进行更改。

无特权同时访问具有不同安全要求的多个网络会产生安全漏洞,并使无特权驱动程序能够在两个网络之间意外地中继数据。 典型示例是同时访问虚拟专用网络 (VPN) 和 Internet。 Windows Server 2003 和 Windows XP 操作系统使用弱主机模型,其中远程访问服务 (RAS) 通过增加其他接口上所有默认路由的路由指标来阻止此类同时访问。 因此,所有流量都通过 VPN 接口路由,从而中断其他网络连接。

在 Windows Vista 和更高版本的 Windows 操作系统上,默认使用强主机模型。 如果使用 GetBestRoute2 函数在路由查找中指定了源 IP 地址,则路由查找仅限于源 IP 地址的 接口。 RAS 的路由指标修改不起作用,因为潜在路由列表甚至没有 VPN 接口的路由,从而允许流量发往 Internet。 驱动程序可以使用 MIB_IPINTERFACE_ROW 结构的 DisableDefaultRoutes 成员在接口上使用默认路由禁用。 当 VPN 客户端不需要拆分隧道时,VPN 客户端可以将此成员用作安全措施来限制拆分隧道。 VPN 客户端可以调用 SetIpInterfaceEntry 函数,以在需要时将 DisableDefaultRoutes 成员设置为 TRUE 。 VPN 客户端可以通过调用 GetIpInterfaceEntry 函数查询 DisableDefaultRoutes 成员的当前状态。

要求

目标平台

通用

版本

在 Windows Vista 和更高版本的 Windows 操作系统中可用。

标头

Netioapi.h (包括 Netioapi.h)

Netio.lib

IRQL

< DISPATCH_LEVEL

另请参阅

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange