GetIpInterfaceEntry 函数检索本地计算机上的指定接口的 IP 信息。
语法
NETIOAPI_API GetIpInterfaceEntry(
_Inout_ PMIB_IPINTERFACE_ROW Row
);
参数
-
行 [in, out]
指向成功返回的 MIB_IPINTERFACE_ROW 结构的指针接收本地计算机上的接口的信息。 在输入时,驱动程序必须将 InterfaceLuid 成员或 InterfaceIndex MIB_IPINTERFACE_ROW 成员设置为接口以检索其信息。
返回值
GetIpInterfaceEntry 如果函数成功,则返回STATUS_SUCCESS。
如果函数失败,GetIpInterfaceEntry 返回以下错误代码之一:
| 返回代码 | 描述 |
|---|---|
| STATUS_INVALID_PARAMETER | 将无效参数传递给函数。 如果在 Row 参数中传递 NULL 指针,则返回此错误。 MIB_IPINTERFACE_ROW结构的 系列 成员,行 参数指向的成员未指定为AF_INET或AF_INET6,或者未指定 InterfaceLuid 和 InterfaceIndex MIB_IPINTERFACE_ROW 成员。 |
| STATUS_NOT_FOUND | 找不到指定的接口。 如果函数找不到由 InterfaceLuid 指定的网络接口或 InterfaceIndex MIB_IPINTERFACE_ROW 结构的成员,Row 参数指向的MIB_IPINTERFACE_ROW结构的成员,则返回此错误。 |
| 其他 | 使用 FormatMessage 函数获取返回的错误的消息字符串。 |
言论
在输入时,驱动程序必须初始化 行 参数指向的 MIB_IPINTERFACE_ROW 结构的以下成员。
家庭
设置为AF_INET或AF_INET6。InterfaceLuid 或 InterfaceIndex
这些成员按前面列出的顺序使用。 因此,如果指定了 InterfaceLuid,则使用此成员来确定接口。 如果未为 InterfaceLuid 成员设置值(此成员的值设置为零),则接下来使用 InterfaceIndex 成员来确定接口。
在输出中,GetIpInterfaceEntry 填充 行 参数指向的MIB_IPINTERFACE_ROW结构的其余成员。
驱动程序必须使用 InitializeIpInterfaceEntry 函数来初始化具有默认值MIB_IPINTERFACE_ROW结构条目的字段。 然后,驱动程序可以更改要修改的MIB_IPINTERFACE_ROW项中的字段,然后调用 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 |