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


Механизм расширения Provider-Specific

Функция WSAIoctl позволяет поставщикам услуг предлагать расширения функций для конкретных поставщиков. Этот механизм, конечно, предполагает, что приложение знает о конкретном расширении и понимает как семантику, так и синтаксис. Как правило, такая информация предоставляется поставщиком услуг.

Чтобы вызвать функцию расширения, приложение должно сначала запросить указатель на нужную функцию. Это делается с помощью функции WSAIoctl с помощью кода команды SIO_GET_EXTENSION_FUNCTION_POINTER. Входной буфер для WSAIoctl содержит идентификатор для требуемой функции расширения, а выходной буфер содержит сам указатель функции. Затем приложение может вызвать функцию расширения напрямую, не проходя через Ws2_32.dll.

Идентификаторы, назначенные функциям расширения, являются глобально уникальными идентификаторами (GUID), которые выделяются поставщиками услуг. Поставщикам, создающим функции расширения, настоятельно рекомендуется публиковать полные сведения о функции, включая синтаксис прототипа функции. Это позволяет предлагать распространенные и популярные функции расширения несколькими поставщиками услуг. Приложение может получить указатель функции и использовать функцию без необходимости знать о конкретном поставщике услуг, который реализует функцию.

В Windows Vista и более поздних версиях новые системные расширения Winsock экспортируются непосредственно из библиотеки DLL Winsock, поэтому для загрузки этих расширений функция WSAIoctl не требуется. Новые функции расширения, доступные в Windows Vista и более поздних версиях, включают функции WSAPoll и WSASendMsg , экспортируемые из Ws2_32.dll.