Функция WSCGetProviderInfo32 (ws2spi.h)
Синтаксис
int WSCGetProviderInfo32(
[in] LPGUID lpProviderId,
[in] WSC_PROVIDER_INFO_TYPE InfoType,
[out] PBYTE Info,
[in, out] size_t *InfoSize,
[in] DWORD Flags,
[out] LPINT lpErrno
);
Параметры
[in] lpProviderId
Указатель на глобальный уникальный идентификатор (GUID) для поставщика.
[in] InfoType
Информационный класс, запрашиваемый для этой записи протокола LSP.
[out] Info
Указатель на буфер для получения данных класса информации для запрошенной записи протокола LSP. Если этот параметр имеет значение NULL, то WSCGetProviderInfo32 возвращает ошибку и размер, необходимый для этого буфера, возвращается в параметре InfoSize .
[in, out] InfoSize
Размер (в байтах) буфера, на который указывает параметр Info . Если параметр Info имеет значение NULL, то WSCGetProviderInfo32 возвращает ошибку, а параметр InfoSize получит размер требуемого буфера.
[in] Flags
Флаги, используемые для изменения поведения вызова функции WSCGetProviderInfo32 .
[out] lpErrno
Указатель на код ошибки в случае сбоя функции.
Возвращаемое значение
Если ошибка не возникает, WSCGetProviderInfo32 возвращает ERROR_SUCCESS (ноль). В противном случае возвращается SOCKET_ERROR, а в параметре lpErrno возвращается определенный код ошибки.
Код ошибки | Значение |
---|---|
|
Вызов не реализован. Эта ошибка возвращается, если в параметре InfoType указан параметр **ProviderInfoAudit**. |
Один или несколько аргументов не входят в допустимую часть адресного пространства пользователя. | |
Один или несколько аргументов являются недопустимыми. | |
Не удалось найти запись протокола для указанного lpProviderId. | |
Произошла неустранимая ошибка. Эта ошибка возвращается при нескольких условиях, включая следующие: у пользователя отсутствуют права администратора, необходимые для доступа к реестру Winsock, или произошел сбой при открытии записи каталога Winsock. | |
Недостаточно памяти. Эта ошибка возвращается при нехватке памяти для выделения новой записи каталога. |
Комментарии
WSCGetProviderInfo32 — это строго 32-разрядная версия WSCGetProviderInfo. На 64-разрядном компьютере все вызовы, не относящиеся к 32-разрядным (например, все функции, которые не заканчиваются на "32"), работают в собственном 64-разрядном каталоге. Процессы, выполняемые на 64-разрядном компьютере, должны использовать определенные вызовы 32-разрядных функций для работы с строго 32-разрядным каталогом и сохранения совместимости. Определения и семантика конкретных 32-разрядных вызовов совпадают с собственными аналогами.
WSCGetProviderInfo32 используется для получения данных класса информации для записи протокола в 32-разрядном поставщике услуг. Если для параметра InfoType задано значение ProviderInfoLspCategories, при успешном выполнении функция WSCGetProviderInfo32 возвращается с параметром Info , заданным с соответствующими флагами категорий LSP, реализованными 32-разрядным LSP.
Winsock 2 поддерживает многоуровневые протоколы. Многоуровневый протокол — это протокол, который реализует только функции связи более высокого уровня, используя при этом базовый стек транспорта для фактического обмена данными с удаленной конечной точкой. Примером многоуровневого протокола или многоуровневого поставщика услуг может быть уровень безопасности, который добавляет протокол в процесс установки подключения для выполнения проверки подлинности и создания взаимно согласованной схемы шифрования. Для такого протокола безопасности обычно требуются службы базового надежного транспортного протокола, например TCP или SPX. Термин базовый протокол относится к такому протоколу, как TCP или SPX, который способен осуществлять обмен данными с удаленной конечной точкой. Термин многоуровневый протокол используется для описания протокола, который не может стоять отдельно. Затем цепочка протоколов будет определена как один или несколько многоуровневых протоколов, нанизанных вместе и привязанных к базовому протоколу. Базовый протокол содержит элемент ChainLenструктуры WSAProtocol_Info , для которого задано значение BASE_PROTOCOL которое определено как 1. Многоуровневый протокол содержит элемент ChainLenструктуры WSAPROTOCOL_INFO , для которого задано значение LAYERED_PROTOCOL которое равно нулю. Цепочка протоколов содержит элемент ChainLenструктуры WSAPROTOCOL_INFO , равный больше 1.
Во время инициализации LSP LSP должен предоставлять указатели на ряд функций Winsock SPI. Эти функции будут вызываться во время обычной обработки слоем непосредственно над LSP (другой LSP или Ws2_32.DLL).
LSP, реализующий устанавливаемую файловую систему (IFS), может выборочно предоставлять указатели на функции, которые реализуются самостоятельно, или передавать указатели, предоставляемые слоем непосредственно под LSP. LSP, отличные от IFS, так как они предоставляют собственные дескрипторы, должны реализовывать все функции Winsock SPI. Это связано с тем, что для каждого 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_INSPECTOR), так и к категории брандмауэра (LSP_FIREWALL).
Если у LSP нет набора категорий, он считается в категории Все остальные. Эта категория LSP не будет загружаться в службы или системные процессы (например, lsass, winlogon и многие процессы svchost).
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | ws2spi.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |
См. также раздел
Классификация поставщиков многоуровневой службы и приложений