Поделиться через


Получение и перевод сетевых адресов

Переключатель сокетов Windows всегда использует форматы адресов WSK, которые содержат IP-адреса, при взаимодействии с поставщиками услуг SAN и сетевыми интерфейсными картами SAN. Переключатель не использует собственное семейство адресов SAN. Поэтому поставщик услуг SAN должен использовать связанный драйвер прокси-сервера для получения списка IP-адресов, назначенных сетевым адаптерам. Поставщик служб SAN использует эти IP-адреса при взаимодействии с его прокси-драйвером. Драйвер прокси-сервера должен переводить между IP-адресами и локальными адресами.

Во время инициализации прокси-драйвер обычно регистрируется в интерфейсе драйвера транспорта (TDI) для уведомлений об изменении адресов. Все транспорты, поддерживающие Plug and Play (PnP), такие как TCP/IP, предоставляют уведомления об изменении адресов через TDI клиентам, зарегистрированным на получение этих уведомлений.

Примечание TDI не будет поддерживаться в версиях Microsoft Windows после Windows Vista. Вместо этого используйте Платформу фильтрации Windows или ядро Winsock.

Регистрация для уведомления об изменении адреса

Во время инициализации драйвер прокси-сервера вызывает функцию TdiRegisterPnPHandlers для регистрации уведомлений об изменении адресов. В этом вызове прокси-драйвер передает указатели на функции обратного вызова для добавления и удаления адресов в членах AddAddressHandlerV2 и DelAddressHandlerV2 структуры TDI_CLIENT_INTERFACE_INFO. После регистрации прокси-драйвера для получения этих уведомлений TDI сразу же обозначает все активные сетевые адреса с помощью обратного вызова добавления адреса.

TDI передает следующие параметры в callback-функции добавления адреса или удаления адреса драйвера прокси-сервера:

адрес
Указатель на структуру TA_ADDRESS, описывающую сетевой адрес, назначенный сетевой карте или удаленный с нее. В случае TCP/IP этот указатель фактически является указателем на структуру TA_ADDRESS_IP.

DeviceName
Указатель на строку Юникода, которая определяет привязку транспорта к сетевому адаптеру, с которой связан адрес. В случае TCP/IP строка Юникода имеет следующий формат:

\Device\Tcpip_{NIC-GUID}

где NIC-GUID — глобальный уникальный идентификатор, назначенный подсистемой конфигурации сети сетевому адаптеру.

Предыдущие определения структуры определены в файле заголовка tdi.h. Предыдущие функции регистрации и обратного вызова определены в файле заголовка tdikrnl.h. Эти файлы заголовков доступны в пакете средств разработки драйверов Microsoft Windows (DDK) и комплекте драйверов Windows (WDK). Подробные сведения о уведомлениях TDI PnP включены в обратные вызовы клиента TDI и обработчики событий клиента TDI и уведомлений PnP.

Примечание TDI не будет поддерживаться в версиях Microsoft Windows после Windows Vista. Вместо этого используйте платформу фильтрации Windows или ядро Winsock.

Обслуживание списка IP-адресов

Прокси-драйвер поставщика услуг SAN использует уведомления о добавлении и удалении адресов для поддержания списка IP-адресов, назначенных каждому сетевому адаптеру под его контролем. Драйвер прокси-сервера использует этот список для перевода между одним или несколькими IP-адресами, назначенными сетевой адаптеру SAN транспортом TCP/IP и собственными SAN-адресами. Прекси-драйвер также должен предоставить рутинную подпрограмму управления устройством, которая делает список IP-адресов, назначенных сетевому адаптеру, доступным для коммутатора сокетов Windows каждый раз, когда коммутатор выполняет запрос на код управления SIO_ADDRESS_LIST_QUERY. Подпрограмма драйвера прокси-сервера DriverEntry должна указывать точку входа для этой подпрограммы управления устройствами.

Коммутатор сокетов Windows поддерживает список всех IP-адресов, назначенных каждому сетевому адаптеру SAN. Чтобы получить IP-адреса для этого инклюзивного списка, коммутатор вызывает каждую функцию поставщика услуг SAN WSPIoctl, передав код управления SIO_ADDRESS_LIST_QUERY. Каждый поставщик услуг SAN, в свою очередь, запрашивает связанный драйвер прокси-сервера для отдельного списка IP-адресов, назначенных сетевым адаптерам SAN. После уведомления об изменении адреса коммутатор снова запрашивает каждого поставщика услуг SAN для обновлений в каждом отдельном списке.