接收和转换 NIC 地址
Windows 套接字交换机在与 SAN 服务提供商和 SAN NIC 交互时,始终使用包含 IP 地址的 WSK 地址系列。 交换机不使用 SAN 的本机地址系列。 因此,SAN 服务提供商必须使用其关联的代理驱动程序来检索分配给其 NIC 的 IP 地址列表。 SAN 服务提供商在与其代理驱动程序交互时使用这些 IP 地址。 代理驱动程序必须在 IP 地址和本机地址之间转换。
在初始化期间,代理驱动程序通常会向传输驱动程序接口 (TDI) 注册地址更改通知。 所有即插即用 (PnP) 感知传输(包括 TCP/IP)通过 TDI 向已注册此类通知的客户端提供地址更改通知。
注意 在 Windows Vista 之后的 Microsoft Windows 版本中将不支持 TDI。 请改用 Windows 筛选平台 或 Winsock 内核 。
注册地址更改通知
在初始化期间,代理驱动程序调用 TdiRegisterPnPHandlers 函数来注册地址更改通知。 在此调用中,代理驱动程序将指针传递给回调函数,以便在 TDI_CLIENT_INTERFACE_INFO 结构的 AddAddressHandlerV2 和 DelAddressHandlerV2 成员中添加和删除地址。 代理驱动程序注册以接收这些通知后,TDI 会立即使用 add-address 回调指示当前活动的所有网络地址。
TDI 将以下参数传递给代理驱动程序的 add-address 或 delete-address 回调函数:
地址
指向TA_ADDRESS结构的指针,该结构描述分配给 NIC 或从 NIC 中删除的网络地址。 对于 TCP/IP,此指针实际上是指向TA_ADDRESS_IP结构的指针。
DeviceName
指向 Unicode 字符串的指针,该字符串标识与地址关联的传输到 NIC 绑定。 对于 TCP/IP,Unicode 字符串具有以下格式:
\Device\Tcpip_{NIC-GUID}
其中,NIC-GUID 是由网络配置子系统分配给 NIC 的全局唯一标识符。
上述结构定义在 tdi.h 头文件中定义。 上述注册和回调函数在 tdikrnl.h 头文件中定义。 Microsoft Windows 驱动程序开发工具包 (DDK) 和 Windows 驱动程序工具包 (WDK) 中提供了这些头文件。 TDI 客户端回调 和 TDI 客户端 事件和 PnP 通知处理程序中包含有关 TDI PnP 通知的详细信息。
注意 在 Windows Vista 之后的 Microsoft Windows 版本中将不支持 TDI。 请改用 Windows 筛选平台 或 Winsock 内核 。
维护 IP 地址列表
SAN 服务提供商的代理驱动程序使用添加地址和删除地址通知来维护分配给其控制下每个 NIC 的 IP 地址列表。 代理驱动程序使用此列表在 TCP/IP 传输分配给 SAN NIC 的一个或多个 IP 地址与本机 SAN 地址之间进行转换。 代理驱动程序还必须提供设备控制例程,使分配给 NIC 的 IP 地址列表在交换机进行SIO_ADDRESS_LIST_QUERY控件代码查询时可供 Windows 套接字交换机使用。 代理驱动程序的 DriverEntry 例程必须为此设备控制例程指定入口点。
Windows 套接字交换机维护分配给每个 SAN NIC 的所有 IP 地址的列表。 为了检索此非独占列表的 IP 地址,交换机会调用每个 SAN 服务提供商的 WSPIoctl 函数,传递SIO_ADDRESS_LIST_QUERY控制代码。 每个 SAN 服务提供商依次查询其关联的代理驱动程序,以获取分配给其 SAN NIC 的单个 IP 地址列表。 当交换机收到地址更改的通知后,它会再次查询每个 SAN 服务提供商,以获取每个单独列表中的更新。