ResolveIpNetEntry2 函数
ResolveIpNetEntry2 函数解析本地计算机上邻居 IP 地址条目的物理地址。
语法
NETIOAPI_API ResolveIpNetEntry2(
_Inout_ PMIB_IPNET_ROW2 Row,
_In_opt_ const SOCKADDR_INET *SourceAddress
);
参数
行 [in, out]
指向邻居 IP 地址条目 MIB_IPNET_ROW2 结构条目的指针。 成功返回后,此结构将更新为邻居 IP 地址的属性。SourceAddress [in, optional]
指向可选源 IP 地址的指针,该地址用于选择要为其发送邻居 IP 地址条目的请求的接口。
返回值
如果函数成功,ResolveIpNetEntry2 将返回STATUS_SUCCESS。
如果函数失败, ResolveIpNetEntry2 将返回以下错误代码之一:
返回代码 | 说明 |
---|---|
STATUS_BAD_NETWORK_NAME | 找不到网络名称。 如果无法访问具有邻居 IP 地址的网络,则返回此错误。 |
STATUS_INVALID_PARAMETER | 向该函数传递了无效参数。 如果在 Row 参数中传递 NULL 指针,Row 参数指向的 MIB_IPNET_ROW2 结构的 Address 成员未设置为有效的 IPv4 或 IPv6 地址,或者未指定 MIB_IPNET_ROW2 结构的 InterfaceLuid 和 InterfaceIndex 成员,则返回此错误。 如果在 Address 成员中传递了环回地址,也会返回此错误。 |
STATUS_NOT_FOUND | 找不到指定的接口。 如果函数找不到由 Row 参数指向的 MIB_IPNET_ROW2 结构的 InterfaceLuid 或 InterfaceIndex 成员指定的网络接口,则返回此错误。 |
STATUS_NOT_SUPPORTED | 不支持该请求。 如果本地计算机上没有 IPv4 堆栈,并且 Row 参数指向的 MIB_IPNET_ROW2 结构的 Address 成员中指定了 IPv4 地址,或者本地计算机上没有 IPv6 堆栈,并且 Address 成员中指定了 IPv6 地址,则返回此错误。 |
其他 | 使用 FormatMessage 函数获取返回错误的消息字符串。 |
注解
ResolveIpNetEntry2 函数用于解析本地计算机上邻居 IP 地址条目的物理地址。 此函数刷新与接口上的 IP 地址匹配的任何现有邻居条目,然后通过发送 IPv4 地址的 ARP 请求或针对 IPv6 地址的邻居请求 (NS) 请求来解析物理地址 (MAC) 地址。 如果指定 SourceAddress 参数, ResolveIpNetEntry2 将选择具有此源 IP 地址的接口以发送请求。 如果在此参数) 中传递 NULL (未指定 SourceAddress 参数,ResolveIpNetEntry2 会自动选择要发送请求的最佳接口。
驱动程序必须初始化 Row 参数指向的 MIB_IPNET_ROW2 结构的以下成员。
Address
设置为有效的 IPv4 或 IPv6 地址和系列。InterfaceLuid 或 InterfaceIndex
这些成员按前面列出的顺序使用。 因此,如果指定 了 InterfaceLuid ,则此成员用于确定接口。 如果没有为 InterfaceLuid 成员设置值 (此成员的值设置为零) ,则接下来使用 InterfaceIndex 成员来确定接口。
如果 Row 参数指向的 MIB_IPNET_ROW2 结构的 Address 成员中传递的 IP 地址是接口上现有邻居 IP 地址的副本,则 ResolveIpNetEntry2 函数会在解析 IP 地址之前刷新现有条目。
在输出中,当调用成功时, ResolveIpNetEntry2 检索邻居 IP 地址的其他属性,并填充 Row 参数指向的MIB_IPNET_ROW2结构。 MIB_IPNET_ROW2 结构中的 PhysicalAddress 和 PhysicalAddressLength 成员初始化为有效的物理地址。
要求
目标平台 |
通用 |
版本 |
在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
标头 |
Netioapi.h (包括 Netioapi.h) |
库 |
Netio.lib |
IRQL |
< DISPATCH_LEVEL |