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

**Примечание.* Многоуровневые поставщики служб не рекомендуются. Начиная с Windows 8 и Windows Server 2012, используйте платформу фильтрации Windows.
 
Функция **WSCInstallProvider** устанавливает указанный поставщик транспорта в базу данных конфигурации системы.

Синтаксис

int WSCInstallProvider(
  [in]  LPGUID                    lpProviderId,
  [in]  const WCHAR               *lpszProviderDllPath,
  [in]  const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
  [in]  DWORD                     dwNumberOfEntries,
  [out] LPINT                     lpErrno
);

Параметры

[in] lpProviderId

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

[in] lpszProviderDllPath

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

[in] lpProtocolInfoList

Указатель на массив WSAProtocol_Info структур. Каждая структура определяет протокол, семейство адресов и тип сокета, поддерживаемые поставщиком.

[in] dwNumberOfEntries

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

[out] lpErrno

Указатель на код ошибки в случае сбоя функции.

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

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

Код ошибки Значение
WSAEFAULT
Один или несколько аргументов не входят в допустимую часть адресного пространства пользователя.
WSAEINVAL
Один или несколько аргументов являются недопустимыми.
WSAENOBUFS
Память не может быть выделена для буферов.
WSANO_RECOVERY
Произошла неустранимая ошибка. Эта ошибка возвращается при нескольких условиях, включая следующие: поставщик уже установлен, пользователь не имеет прав администратора, необходимых для записи в реестр Winsock, или произошел сбой при создании или установке записи каталога.
WSASYSCALLFAILURE
Системный вызов, который никогда не должен завершать ошибку, завершился сбоем.
WSA_NOT_ENOUGH_MEMORY
Недостаточно памяти. Эта ошибка возвращается при нехватке памяти для выделения новой записи каталога.

Комментарии

WSCInstallProvider используется для установки одного поставщика транспортных служб. Эта подпрограмма создает необходимые общие сведения о конфигурации Сокетов Windows 2 для указанного поставщика. Она применима к базовым протоколам, многоуровневым протоколам и цепочкам протоколов. Если устанавливается поставщик многоуровневой службы, следует использовать 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 содержит список записей протокола для установки. Абоненты WSCInstallProvider отвечают за настройку соответствующих записей протокола. Параметр lpProtocolInfoList не должен иметь значение NULL.

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

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

 

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

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

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

Требования

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

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

WSAEnumProtocols

WSAProtocol_Info

WSAProviderConfigChange

WSAStartup

WSCDeinstallProvider

WSCEnumProtocols