Windows Sockets 切換器在與 SAN 服務提供者和 SAN 網路介面卡互動時,始終使用 WSK 位址族群,其中包含 IP 位址。 交換器不會使用 SAN 的原生位址系列。 因此,SAN 服務提供者必須使用其相關聯的 Proxy 驅動程式來擷取指派給其 NIC 的 IP 位址清單。 SAN 服務提供者在與其 Proxy 驅動程式互動時,會使用這些 IP 位址。 Proxy 驅動程式必須在IP位址與原生地址之間轉譯。
初始化期間,代理驅動程式通常會向傳輸驅動程式介面 (TDI) 註冊以獲取地址變更通知。 所有支援即插即用(PnP)的傳輸協定,包括 TCP/IP,皆透過 TDI 向已註冊這類通知的用戶端提供地址變更通知。
zh-TW: 注意 在 Windows Vista 之後的 Microsoft Windows 版本不再支援 TDI。 請改用 Windows 篩選平臺 或 Winsock 核心。
為地址變更通知進行註冊
初始化期間,Proxy 驅動程式會呼叫 TdiRegisterPnPHandlers 函式來註冊地址變更通知。 在此呼叫中,Proxy 驅動程式會將指向回調函式的指標傳遞給 AddAddressHandlerV2 和 DelAddressHandlerV2,這些是 TDI_CLIENT_INTERFACE_INFO 結構的成員,用於地址的新增和刪除。 Proxy 驅動程式註冊以接收這些通知之後,TDI 會使用新增位址回呼來提示所有目前作用中的網路位址。
TDI 會將下列參數傳遞至代理驅動程式的新增地址或刪除地址回呼函式中:
位址
描述指派給 NIC 或從 NIC 移除之網路位址的 TA_ADDRESS 結構的指標。 在 TCP/IP 的情況下,此指標實際上是TA_ADDRESS_IP結構的指標。
DeviceName
識別與地址相關聯之傳輸至 NIC 系結之 Unicode 字串的指標。 如果是 TCP/IP,Unicode 字串的格式如下:
\Device\Tcpip_{NIC-GUID}
其中 NIC-GUID 是網路設定子系統指派給 NIC 的全域唯一標識碼。
上述結構定義是在 tdi.h 頭檔中定義。 上述註冊和回呼函式定義於 tdikrnl.h 頭檔中。 這些標頭檔可在 Microsoft Windows 驅動程式開發工具套件 (DDK) 和 Windows 驅動程式套件 (WDK) 中使用。 TDI PnP 通知的詳細資訊包含在 TDI 用戶端回呼 和 TDI 用戶端事件和 PnP 通知處理程式中。
zh-TW: 注意 在 Windows Vista 之後的 Microsoft Windows 版本不再支援 TDI。 請改用 Windows 篩選平臺 或 Winsock 核心。
維護IP位址清單
SAN 服務提供者的 Proxy 驅動程式會使用新增地址和刪除位址通知來維護指派給其控制下每個 NIC 的 IP 位址清單。 Proxy 驅動程式會使用此列表,在 TCP/IP 傳輸和原生 SAN 位址指派給 SAN NIC 的一或多個 IP 位址之間進行轉譯。 Proxy 驅動程式也必須提供裝置控制例程,以使指派給 NIC 的 IP 位址清單可供 Windows Sockets 交換器使用,每當交換器進行 SIO_ADDRESS_LIST_QUERY 控制代碼查詢時。 Proxy 驅動程式的 DriverEntry 例程必須為此裝置控制例程指定進入點。
Windows Sockets 交換器會維護一個清單,列出指派給每個 SAN NIC 的所有 IP 位址。 若要擷取此內含清單的IP位址,交換機會呼叫每個SAN服務提供者的 WSPIoctl 函式,並傳遞SIO_ADDRESS_LIST_QUERY控制代碼。 接著,每個SAN服務提供者會查詢其相關聯的 Proxy 驅動程式,以取得指派給其 SAN NIC 的個別 IP 位址清單。 當交換器收到位址變更的通知之後,它會再次查詢每個 SAN 服務提供者,以取得每個個別清單中的更新。