Функция WSCSetProviderInfo (ws2spi.h)
Синтаксис
int WSCSetProviderInfo(
[in] LPGUID lpProviderId,
[in] WSC_PROVIDER_INFO_TYPE InfoType,
[in] PBYTE Info,
[in] size_t InfoSize,
[in] DWORD Flags,
[out] LPINT lpErrno
);
Параметры
[in] lpProviderId
Указатель на глобальный уникальный идентификатор (GUID) для поставщика.
[in] InfoType
Класс сведений, который необходимо задать для этой записи протокола LSP.
[in] Info
Указатель на буфер, содержащий данные класса информации, которые необходимо задать для записи протокола LSP.
[in] InfoSize
Размер (в байтах) буфера, на который указывает параметр Info .
[in] Flags
Флаги, используемые для изменения поведения вызова функции WSCSetProviderInfo .
[out] lpErrno
Указатель на код ошибки в случае сбоя функции.
Возвращаемое значение
Если ошибка не возникает, функция WSCSetProviderInfo возвращает ERROR_SUCCESS (ноль). В противном случае возвращается SOCKET_ERROR, а в параметре lpErrno возвращается определенный код ошибки.
Код ошибки | Значение |
---|---|
|
Вызов не реализован. Эта ошибка возвращается, если в параметре InfoType указан параметр **ProviderInfoAudit**. |
Один или несколько аргументов не входят в допустимую часть адресного пространства пользователя. | |
Один или несколько аргументов являются недопустимыми. | |
Произошла неустранимая ошибка. Эта ошибка возвращается при нескольких условиях, включая следующие: у пользователя отсутствуют права администратора, необходимые для записи в реестр Winsock, или произошел сбой при открытии записи каталога Winsock. | |
Недостаточно памяти. Эта ошибка возвращается, если памяти недостаточно для выделения новой записи каталога. |
Комментарии
WSCSetProviderInfo используется для задания данных класса информации для многоуровневого поставщика услуг. Если для параметра InfoType задано значение ProviderInfoLspCategories, при успешном выполнении WSCSetProviderInfo устанавливает соответствующие флаги категории LSP, реализованные поставщиком на основе значения, переданного в параметре Info .
Winsock 2 поддерживает многоуровневые протоколы. Многоуровневый протокол — это протокол, который реализует только функции обмена данными более высокого уровня, используя при этом базовый транспортный стек для фактического обмена данными с удаленной конечной точкой. Примером многоуровневого протокола или многоуровневого поставщика услуг может быть уровень безопасности, который добавляет протокол в процесс установки подключения для выполнения проверки подлинности и установления взаимно согласованной схемы шифрования. Для такого протокола безопасности обычно требуются службы базового надежного транспортного протокола, такого как TCP или SPX. Термин базовый протокол относится к такому протоколу, как TCP или SPX, который может осуществлять обмен данными с удаленной конечной точкой. Термин многоуровневый протокол используется для описания протокола, который не может стоять отдельно. Затем цепочка протоколов будет определена как один или несколько многоуровневых протоколов, нанизанных вместе и привязанных базовым протоколом. Базовый протокол содержит элемент ChainLenструктуры WSAPROTOCOL_INFO , для которого задано значение BASE_PROTOCOL которое определено как 1. Многоуровневый протокол содержит элемент ChainLenструктуры WSAPROTOCOL_INFO , для которого задано значение LAYERED_PROTOCOL которое определено как ноль. В цепочке протоколов элемент ChainLenструктуры WSAPROTOCOL_INFO имеет значение больше 1.
Во время инициализации LSP должен предоставлять указатели на ряд функций Winsock SPI. Эти функции будут вызываться во время обычной обработки слоем непосредственно над LSP (другой LSP или Ws2_32.dll).
LSP, реализующий устанавливаемую файловую систему (IFS), может выборочно предоставлять указатели на функции, которые реализуются сами по себе, или передавать указатели, предоставляемые слоем непосредственно под LSP. LSP, отличные от IFS, так как они предоставляют собственные дескрипторы, должны реализовывать все функции SPI Winsock. Это связано с тем, что для каждого SPI потребуется, чтобы LSP сопоставил все созданные им дескриптор сокета с дескриптором нижнего поставщика (другой LSP или базовый протокол).
Однако все LSP выполняют определенную работу, выполняя дополнительную обработку только для подмножества функций Winsock SPI.
Категории LSP можно определить на основе подмножества функций SPI, которые реализует LSP, и характера дополнительной обработки, выполняемой для каждой из этих функций.
Классифицируя LSP, а также классифицируя приложения, использующие сокеты Winsock, можно выборочно определить, следует ли участвовать LSP в данном процессе во время выполнения.
В Windows Vista и более поздних версиях LSP можно классифицировать в зависимости от того, как он взаимодействует с вызовами и данными сокетов Windows. Категория LSP — это определяемая группа поведений в подмножестве функций Winsock SPI. Например, фильтр содержимого HTTP будет классифицирован как инспектор данных ( категория LSP_INSPECTOR ). Категория LSP_INSPECTOR будет проверять, но не изменять параметры для функций SPI передачи данных. Приложение может запросить категорию LSP и не загружать LSP на основе категории LSP и набора разрешенных категорий LSP приложения.
В следующей таблице перечислены категории, по которым можно классифицировать LSP.
Категория LSP | Описание |
---|---|
**LSP_CRYPTO_COMPRESS** | LSP — это поставщик шифрования или сжатия данных. |
**LSP_FIREWALL** | LSP является поставщиком брандмауэра. |
**LSP_LOCAL_CACHE** | LSP является поставщиком локального кэша. |
**LSP_INBOUND_MODIFY** | LSP изменяет входящие данные. |
**LSP_INSPECTOR** | LSP проверяет или фильтрует данные. |
**LSP_OUTBOUND_MODIFY** | LSP изменяет исходящие данные. |
**LSP_PROXY** | LSP выступает в качестве прокси-сервера и перенаправляет пакеты. |
**LSP_REDIRECTOR** | LSP — это перенаправитель сети. |
**LSP_SYSTEM** | LSP можно использовать в службах и системных процессах. |
Если LSP не имеет набора категорий, он считается в категории Все остальные. Эта категория LSP не будет загружена в службы или системные процессы (например, lsass, winlogon и многие процессы svchost).
Функция WSCSetProviderInfo может вызываться только пользователем, вошедшего в систему как член группы Администраторы. Если WSCSetProviderInfo вызывается пользователем, не включаемым в группу Администраторы, вызов функции завершится ошибкой и WSANO_RECOVERY возвращается в параметре lpErrno . Эта функция также может завершиться сбоем из-за контроля учетных записей (UAC). Если приложение, содержащее эту функцию, выполняется пользователем, вошедшего в систему как участник группы администраторов, отличный от встроенного администратора, этот вызов завершится ошибкой, если приложение не было отмечено в файле манифеста параметром requestedExecutionLevel , для которого задано значение requireAdministrator. Если в приложении в Windows Vista или Windows Server 2008 отсутствует этот файл манифеста, пользователь, вошедший в систему как член группы администраторов, отличный от встроенного администратора, должен выполнять приложение в расширенной оболочке в качестве встроенного администратора (администратора запуска от имени) для успешного выполнения этой функции.
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | ws2spi.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |
См. также раздел
Классификация поставщиков многоуровневой службы и приложенийWSAPROTOCOL_INFOWSCGetApplicationCategoryWSCGetProviderInfoWSCSetApplicationCategoryWSC_PROVIDER_INFO_TYPE