Поставщики служб пространства имен
Поставщик пространства имен реализует сопоставление интерфейсов между пространством имен Winsock SPI и собственным программным интерфейсом существующей службы имен, такой как DNS, X.500 или NetWare Directory Services (NDS). Хотя поставщик пространства имен поддерживает только одно пространство имен, для данного пространства имен может быть установлено несколько поставщиков. Кроме того, одна библиотека DLL может создать экземпляр из нескольких поставщиков пространств имен. По мере установки поставщиков пространств имен сохраняется каталог WSANAMESPACE_INFO структур. Приложение может использовать WSAEnumNameSpaceProviders для обнаружения поддерживаемых на компьютере пространств имен.
В Windows Vista и более поздних версиях предоставляется расширенная структура WSANAMESPACE_INFOEX и функция WSAEnumNameSpaceProvidersEx .
На 64-разрядных платформах для перечисления 32-разрядного каталога предоставляются аналогичные функции WSCEnumNameSpaceProvidersEx32 и WSCEnumNameSpaceProvidersEx32.
Дополнительные сведения см. в статье Требования к поставщику службы пространства имен Winsock .
Устаревшие поставщики служб GetXbyY
Сокеты Windows 2 полностью поддерживают средства разрешения имен, относящиеся к TCP/IP, в сокетах Windows версии 1.1. Это делается путем включения набора функций GetXbyY в SPI. Однако обработка этого набора функций несколько отличается от остальных функций SPI. Функции GetXbyY , отображаемые в SPI, предваряются GETXBYYSP_ и обобщаются в следующей таблице.
Функции стиля Беркли
Имя функции SPI | Описание |
---|---|
GETXBYYSP_gethostbyaddr | Предоставляет структуру узла для указанного адреса узла. |
GETXBYYSP_gethostbyname | Предоставляет структуру узла для указанного имени узла. |
GETXBYYSP_getprotobyname | Предоставляет структуру-прототип для указанного имени протокола. |
GETXBYYSP_getprotobynumber | Предоставляет структуру-прототип для указанного номера протокола. |
GETXBYYSP_getservbyname | Предоставляет обслуживаемую структуру для указанного имени службы.e |
GETXBYYSP_getservbyport | Предоставляет обслуживаемую структуру для службы на указанном порту. |
GETXBYYSP_gethostname | Возвращает стандартное имя узла для локального компьютера. |
Функции асинхронного стиля
Имя функции SPI | Описание |
---|---|
GETXBYYSP_WSAAsyncGetHostByAddr | Предоставляет структуру узла для указанного адреса узла. |
GETXBYYSP_WSAAsyncGetHostByName | Предоставляет структуру узла для указанного имени узла. |
GETXBYYSP_WSAAsyncGetProtoByName | Предоставляет структуру-прототип для указанного имени протокола. |
GETXBYYSP_WSAAsyncGetProtoByNumber | Предоставляет структуру-прототип для указанного номера протокола. |
GETXBYYSP_WSAAsyncGetServByName | Предоставляет обслуживаемую структуру для указанного имени службы. |
GETXBYYSP_WSAAsyncGetServByPort | Предоставляет обслуживаемую структуру для службы на указанном порту. |
GETXBYYSP_WSACancelAsyncRequest | Отменяет асинхронную операцию GetXbyY . |
Синтаксис и семантика этих функций GetXbyY в SPI точно такие же, как описаны в спецификации API, и поэтому здесь не повторяются.
Библиотека DLL Windows Sockets 2 позволяет предоставлять эти службы только одному поставщику служб. Поэтому нет необходимости включать указатели на эти функции в таблицу процедур, полученную от поставщиков услуг при запуске. В средах Windows путь к библиотеке DLL, реализующей эти функции, извлекается из значения, указанного в следующем пути реестра. Эта запись реестра не существует по умолчанию:
HKEY_LOCAL_MACHINE\Системы\CurrentControlSet\Услуги\WinSock2\Параметры\GetXByYLibraryPath
Built-In поставщика служб GetXbyy по умолчанию
Поставщик служб GetXbyY по умолчанию интегрирован в стандартные компоненты среды выполнения Windows Sockets 2. Этот поставщик по умолчанию реализует все перечисленные выше функции, поэтому для реализации этих функций каким-либо поставщиком пространства имен не требуется. Однако поставщик пространства имен может предоставить любую или все эти функции (и таким образом переопределить значения по умолчанию), просто сохранив строку, которая является путем к библиотеке DLL, реализующей эти функции, в указанном разделе реестра. Любые функции GetXbyY , не экспортированные библиотекой DLL именованного поставщика, будут предоставляться через встроенные значения по умолчанию. Однако обратите внимание, что если поставщик выбирает предоставить любую из асинхронных версий функций GetXbyY , он должен предоставить все асинхронные функции, чтобы операция отмены работала надлежащим образом.
Текущая реализация поставщика услуг GetXbyY по умолчанию находится в Wsock32.dll. В зависимости от того, как параметры TCP/IP были установлены с помощью панель управления, разрешение имен будет осуществляться с помощью файлов DNS или локальных узлов. При использовании DNS поставщик службы GetXbyY по умолчанию использует стандартные вызовы API Сокетов Windows 1.1 для взаимодействия с DNS-сервером. Эти транзакции будут выполняться с использованием любого стека TCP/IP, настроенного в качестве стека TCP/IP по умолчанию. Однако два особых случая заслуживают особого упоминание.
Реализация по умолчанию GETXBYYSP_gethostname получает имя локального узла из реестра. Это будет соответствовать имени, присвоенному "Мой компьютер". Реализация по умолчанию GETXBYYSP_gethostbyname и GETXBYYSP_WSAAsyncGetHostByName всегда сравнивает указанное имя узла с именем локального узла. Если они совпадают, реализация по умолчанию использует частный интерфейс для проверки стека MICROSOFT TCP/IP, чтобы обнаружить его локальный IP-адрес. Таким образом, чтобы быть полностью независимым от стека MICROSOFT TCP/IP, поставщик пространства имен должен реализовать как GETXBYYSP_gethostbyname, так и GETXBYYSP_WSAAsyncGetHostByName.