Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ws2_32.dll загружает библиотеку DLL интерфейса поставщика услуг в систему с помощью стандартных механизмов динамической загрузки библиотеки Microsoft Windows и инициализирует ее путем вызова WSPStartup. Обычно это активируется вызовом приложения, вызывающегосокетаили WSASocket для создания нового сокета, связанного с поставщиком услуг, библиотека DLL интерфейса которого в настоящее время не загружается в память. Путь к библиотеке DLL интерфейса каждого поставщика услуг хранится Ws2_32.dll во время установки поставщика услуг. Дополнительные сведения см. в функциях установки и конфигурации.
Со временем разные версии могут существовать для библиотек DLL, приложений и поставщиков служб Winsock. Новые версии могут определять новые функции и новые параметры для структур данных и битовых параметров и т. д. Поэтому номера версий указывают, как интерпретировать различные структуры данных.
Чтобы обеспечить оптимальное сочетание и сопоставление различных версий приложений, версий самого Ws2_32.dll и версий поставщиков услуг различными поставщиками услуг, SPI предоставляет механизм согласования версий для использования между Ws2_32.dll и поставщиками услуг. Это согласование версий обрабатывается WSPStartup. В основном Ws2_32.dll передает поставщику услуг самые высокие номера версий, с которыми она совместима. Поставщик услуг сравнивает это с собственным поддерживаемым диапазоном номеров версий. Если эти диапазоны перекрываются, поставщик услуг возвращает значение в перекрывающейся части диапазона в результате согласования. Как правило, это должно быть максимально возможное значение. Если диапазоны не перекрываются, две стороны несовместимы и функция возвращает ошибку.
WSPStartup должен вызываться по крайней мере один раз в каждом процессе клиента и вызываться несколько раз Ws2_32.dll или другими сущностями. Соответствующий WSPCleanup должен вызываться для каждого успешного вызова WSPStartup. Поставщик услуг должен поддерживать количество ссылок на основе каждого процесса. При каждом вызове WSPStartup вызове WSPStartup вызывающий объект может указать любой номер версии, поддерживаемый библиотекой DLL SP.
Поставщик услуг должен хранить указатель на таблицу диспетчеризации клиента, полученную в качестве параметра WSPStartup на основе каждого процесса. Если данный процесс вызывает WSPStartup несколько раз, поставщик услуг должен использовать только последний предоставленный указатель таблицы диспетчера.
В рамках процесса инициализации поставщика услуг Ws2_32.dll извлекает таблицу отправки поставщика услуг через параметр lpProcTable, чтобы получить точки входа для остальных функций SPI, указанных в этом документе.
Использование таблицы диспетчера (в отличие от обычных механизмов DLL для доступа к точкам входа) служит двумя целями:
- Это удобнее для Ws2_32.dll, так как один вызов можно сделать для обнаружения всего набора точек входа.
- Это позволяет многоуровневые поставщики услуг, сформированные в цепочках протоколов, более эффективно работать.
Инициализация цепочек протоколов
Во время установки WSAPROTOCOL_INFO структуры для цепочки протоколов также указывается путь к первому многоуровневой поставщику в цепочке. При инициализации цепочки протоколов Ws2_32.dll использует этот путь для загрузки библиотеки DLL поставщика, а затем вызывает WSPStartup. Так как WSPStartup включает указатель на структуру WSAPROTOCOL_INFO цепочки в качестве одного из его параметров, многоуровневые поставщики могут определить тип цепочки, в которую они инициализированы, и удостоверение следующего нижнего слоя в цепочке. Затем многоуровневый поставщик в свою очередь загружает следующий поставщик протокола в цепочку и инициализирует его вызовом WSPStartupи т. д. Всякий раз, когда следующий нижний уровень является другим многоуровневым поставщиком, структура WSAPROTOCOL_INFO цепочки должна ссылаться на вызов WSPStartup. Если следующий нижний слой является базовым протоколом (обозначающим конец цепочки), структура WSAPROTOCOL_INFO цепочки больше не распространяется вниз. Вместо этого текущий слой должен ссылаться на структуру WSAPROTOCOL_INFO, соответствующую протоколу, который должен использовать базовый поставщик. Таким образом, базовый поставщик не имеет понятия о том, что он участвует в цепочке протоколов.
Таблица отправки, предоставляемая любым заданным многоуровневым поставщиком, дублирует точки входа базового поставщика. Многоуровневый поставщик будет вставлять только собственные точки входа для функций, к которым он должен быть непосредственно вовлечен. Обратите внимание на то, что необходимо, чтобы многоуровневый поставщик не изменял содержимоетаблицыной таблицы, полученной при вызове WSPStartup на следующем нижнем уровне в цепочке протоколов. Эти значения должны быть сделаны непосредственно в библиотеке DLL сокетов Windows 2.