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


Функция WSCInstallProviderAndChains (ws2spi.h)

Примечание

Многоуровневые поставщики служб являются устаревшими. Начиная с Windows 8 и Windows Server 2012, используйте платформу фильтрации Windows. Функция WSCInstallProviderAndChains устанавливает указанный 32-разрядный поставщик транспорта, а также определенные цепочки протоколов в базу данных конфигурации системы Winsock 2 на 32-разрядном компьютере. Эта функция гарантирует, что цепочки протоколов упорядочены в начале сведений о конфигурации поставщика транспорта, гарантируя, что отдельный вызов WSCWriteProviderOrder не требуется.

Синтаксис

int WSCInstallProviderAndChains(
  [in]            LPGUID              lpProviderId,
  [in]            const LPWSTR        lpszProviderDllPath,
  [in]            const LPWSTR        lpszLspName,
  [in]            DWORD               dwServiceFlags,
  [in]            LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  [in]            DWORD               dwNumberOfEntries,
  [out, optional] LPDWORD             lpdwCatalogEntryId,
  [out]           LPINT               lpErrno
);

Параметры

[in] lpProviderId

Указатель на глобальный уникальный идентификатор (GUID) для конкретного поставщика.

[in] lpszProviderDllPath

Указатель на строку Юникода, содержащую путь загрузки к библиотеке DLL поставщика. Эта строка соблюдает обычные правила разрешения пути и может содержать строки внедренной среды (например, %SystemRoot%. Такие строки среды расширяются всякий раз , когдаWs2_32.dll впоследствии загружает библиотеку DLL поставщика от имени приложения. После развертывания строк внедренной среды Ws2_32.dll передает полученную строку в функцию LoadLibrary для загрузки поставщика в память. Дополнительные сведения см. в разделе LoadLibrary.

[in] lpszLspName

Указатель на строку Юникода, содержащую имя поставщика сокета.

[in] dwServiceFlags

Флаги службы для типа создаваемой фиктивной записи каталога.

Фиктивная запись — это структура WSAProtocol_Info с элементом ChainLen , равным 0. Фактическая запись каталога LSP будет ссылаться на идентификатор этой фиктивной записи в ее члене ProtocolChain .

Возможные флаги, которые можно задать для этого параметра:

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

[in] lpProtocolInfoList

Указатель на массив WSAProtocol_Info структур. Каждая структура определяет протокол, семейство адресов и тип сокета, поддерживаемые поставщиком. Проверяемые элементы структуры WSAPROTOCOL_INFO : iProtocol, iAddressFamily и iSocketType.

[in] dwNumberOfEntries

Количество записей в массиве lpProtocolInfoList .

[out, optional] lpdwCatalogEntryId

Получает указатель на только что установленную "фиктивную" запись для поставщика транспорта в базе данных конфигурации системы Winsock 2. Этот идентификатор используется для установки записей каталога для LSP.

[out] lpErrno

Указатель, который получает код ошибки, созданный вызовом, если функция завершается сбоем.

Возвращаемое значение

If
WSCInstallProviderAndChains успешно возвращает ноль. В противном случае возвращается SOCKET_ERROR, а в параметре lpErrno возвращается определенный код ошибки.

Код ошибки Значение
WSAEFAULT
Один или несколько аргументов не входят в допустимую часть адресного пространства пользователя.
WSAEINVAL
Один или несколько аргументов являются недопустимыми. Эта ошибка возвращается для следующих условий: параметр lpProviderId имеет значение **NULL**, параметр lpszProviderDllPath недопустим или длина пути слишком велика (**MAX_PATH** превышено), параметр lpszLspName недопустим или длина имени слишком велика (**WSAPROTOCOL_LEN** превышена), lpProtocolInfoList имеет значение non-*NULL**, а dwNumberOfEntries параметр равен нулю, повторяющийся идентификатор поставщика или многоуровневое имя поставщика услуг уже существуют в каталоге, или не удается найти совпадение для указанного протокола, семейства адресов и типа сокета.
WSAEINPROGRESS
Установка поставщика уже выполняется.
WSAEINVALIDPROCTABLE
У поставщика отсутствуют необходимые функциональные возможности.
WSAENOBUFS
Память не может быть выделена для буферов.
WSANO_RECOVERY
Произошла неустранимая ошибка. Эта ошибка возвращается при нескольких условиях, включая следующее: поставщик уже установлен, параметр lpProtocolInfoList был **NULL** и базовый поставщик не найден, достигнута максимальная длина цепочки протоколов (**MAX_PROTOCOL_CHAIN**), у пользователя отсутствуют права администратора, необходимые для записи в реестр Winsock, или произошел сбой при создании или установке записи каталога.
WSASYSCALLFAILURE
Системный вызов, который никогда не должен завершать ошибку, завершился сбоем.

Комментарии

WSCInstallProviderAndChains — это расширенная версия базовой функции WSCInstallProvider , используемой для установки одного поставщика транспортных служб. Если устанавливается поставщик многоуровневой службы, следует использовать WSCInstallProviderAndChains . WSCInstallProviderAndChains может установить многоуровневый протокол и одну или несколько цепочек протоколов с одним вызовом функции. Для выполнения той же работы с помощью WSCInstallProvider потребуется несколько вызовов функций.

Winsock 2 поддерживает многоуровневые протоколы. Многоуровневый протокол — это протокол, который реализует только функции связи более высокого уровня, полагаясь на базовый транспортный стек для фактического обмена данными с удаленной конечной точкой. Примером многоуровневого протокола может быть уровень безопасности, который добавляет протокол в процесс установления соединения для выполнения проверки подлинности и создания взаимно согласованной схемы шифрования. Для такого протокола безопасности обычно требуются службы базового надежного транспортного протокола, например TCP или SPX. Термин базовый протокол относится к такому протоколу, как TCP или SPX, который способен осуществлять обмен данными с удаленной конечной точкой. Термин многоуровневый протокол используется для описания протокола, который не может стоять отдельно. Затем цепочка протоколов будет определена как один или несколько многоуровневых протоколов, нанизанных вместе и привязанных к базовому протоколу. Базовый протокол содержит элемент ChainLenструктуры WSAProtocol_Info , для которого задано значение BASE_PROTOCOL которое определено как 1. Многоуровневый протокол содержит элемент ChainLenструктуры WSAPROTOCOL_INFO , для которого задано значение LAYERED_PROTOCOL которое равно нулю. Цепочка протоколов содержит элемент ChainLenструктуры WSAPROTOCOL_INFO , равный больше 1.

Если для lpProtocolInfoList задано значение NULL, эта функция создает цепочки протоколов, в которых поставщик накладывается на базовый протокол для каждого уникального типа протокола, определенного в семействе адресов, типе сокета и протоколе. Это исключает создание любых недоступных повторяющихся записей поставщика.

Если lpProtocolInfoList имеет значение, отличное от NULL , эта функция создает цепочки протоколов, получая самую верхнюю запись в сведениях о конфигурации, которая соответствует семейству адресов, типу сокета и протоколу из каждого элемента в предоставленном массиве. Опять же, учитываются только семейство адресов, тип сокета и протокол; все остальные элементы и дубликаты игнорируются.

После успешного завершения этого вызова все последующие вызовы WSAEnumProtocols или WSCEnumProtocols будут возвращать только что созданные записи цепочки протоколов. Имейте в виду, что в средах Windows только экземпляры Ws_32.dll , созданные путем вызова WSAStartup после успешного завершения WSCInstallProviderAndChains , будут включать новые записи при возврате WSAEnumProtocols и WSCEnumProtocols .

Примечание Функция WSAEnumProtocols не перечисляет многоуровневую запись протокола, а WSCEnumProtocols .

 

При успешном выполнении WSCInstallProviderAndChains попытается предупредить все заинтересованные приложения, зарегистрированные для уведомления об изменении, вызвав WSAProviderConfigChange.

Функция WSCInstallProviderAndChains может вызываться только пользователем, вошедшим в систему как член группы администраторов. Если WSCInstallProviderAndChains вызывается пользователем, не членом группы Администраторы, вызов функции завершится ошибкой и WSANO_RECOVERY возвращается в параметре lpErrno . Для компьютеров под управлением Windows Vista или Windows Server 2008 эта функция также может завершиться сбоем из-за контроля учетных записей пользователей (UAC). Если приложение, содержащее эту функцию, выполняется пользователем, вошедшего в систему как член группы администраторов, отличный от встроенного администратора, этот вызов завершится ошибкой, если приложение не было отмечено в файле манифеста с параметром requestedExecutionLevel , для которого задано значение requireAdministrator. Если в приложении в Windows Vista или Windows Server 2008 отсутствует этот файл манифеста, пользователь, вошедший в систему как член группы администраторов, отличный от встроенного администратора, должен выполнить приложение в расширенной оболочке в качестве встроенного администратора (администратора запуска от имени администратора), чтобы эта функция была успешно выполнена.

Любая установка файла или настройка для конкретного поставщика должна выполняться вызывающим приложением.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header ws2spi.h
Библиотека Ws2_32.lib
DLL Ws2_32.dll

См. также раздел

LoadLibrary

Настройка и установка транспорта

Поставщики транспортных услуг

WSAEnumProtocols

WSAProviderConfigChange

WSAStartup

WSCEnumProtocols

WSCInstallProvider

WSCWriteProviderOrder