функция обратного вызова LPNSPV2LOOKUPSERVICENEXTEX (ws2spi.h)
Функция NSPv2LookupServiceNextEx вызывается после получения дескриптора из предыдущего вызова NSPv2LookupServiceBegin для получения запрошенных сведений от поставщика службы пространства имен версии 2.
Синтаксис
LPNSPV2LOOKUPSERVICENEXTEX Lpnspv2lookupservicenextex;
void Lpnspv2lookupservicenextex(
[in] HANDLE hAsyncCall,
[in] HANDLE hLookup,
[in] DWORD dwControlFlags,
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSAQUERYSET2W lpqsResults
)
{...}
Параметры
[in] hAsyncCall
Дескриптор, возвращенный при предыдущем вызове NSPv2LookupServiceBegin , используемый для асинхронных вызовов.
[in] hLookup
Дескриптор, возвращенный при предыдущем вызове NSPv2LookupServiceBegin.
[in] dwControlFlags
Флаги, используемые для управления следующей операцией. В настоящее время только LUP_FLUSHPREVIOUS определяется как средство обработки слишком большого результирующих наборов. Если приложение не может предоставить достаточно большой буфер, настройка LUP_FLUSHPREVIOUS указывает поставщику отменить последний результирующий набор, который был слишком большим, и перейти к следующему набору для этого вызова.
[in, out] lpdwBufferLength
Размер входных данных в байтах, который содержится в буфере, на который указывает lpqsResults. В выходных данных, если функция завершается сбоем и ошибка WSAEFAULT, она содержит минимальный размер в байтах для передачи lpqsResults для получения записи.
[out] lpqsResults
Указатель на блок памяти, который при возврате будет содержать один результирующий набор в структуре WSAQUERYSET2 .
Возвращаемое значение
Функция должна возвращать NO_ERROR (ноль), если подпрограмма выполнена успешно. Он должен вернуть SOCKET_ERROR (т. е. 1), если подпрограмма завершается сбоем, и она должна задать соответствующий код ошибки с помощью WSASetLastError.
Код ошибки | Значение |
---|---|
Во время обработки этого вызова был выполнен вызов NSPv2LookupServiceEnd . Звонок отменен. Данные в буфере lpqsResults неопределенны.
В сокетах Windows 2 конфликтующие коды ошибок определяются для WSAECANCELLED (10103) и WSA_E_CANCELLED (10111). Код ошибки WSAECANCELLED будет удален в следующей версии и останется только WSA_E_CANCELLED. Поставщики пространств имен должны использовать код ошибки WSA_E_CANCELLED для обеспечения совместимости с максимально широким диапазоном приложений. |
|
Больше нет доступных данных.
В сокетах Windows 2 конфликтующие коды ошибок определяются для WSAENOMORE (10102) и WSA_E_NO_MORE (10110). Код ошибки WSAENOMORE будет удален в следующей версии и останется только WSA_E_NO_MORE. Поставщики пространств имен должны использовать код ошибки WSA_E_NO_MORE для обеспечения совместимости с максимально широким диапазоном приложений. |
|
Буфер lpqsResults был слишком мал, чтобы содержать набор WSAQUERYSET . | |
Один или несколько параметров недопустимы или отсутствуют для этого поставщика. | |
Указанный дескриптор подстановки недопустим. | |
Имя найдено в базе данных, но данные, соответствующие заданным ограничениям, не найдены. | |
Служба неизвестна. Служба не найдена в указанном пространстве имен. | |
Недостаточно памяти для выполнения этой операции. |
Комментарии
Функция NSPv2LookupServiceNextEx используется как часть архитектуры поставщика служб пространства имен версии 2 (NSPv2), доступной в Windows Vista и более поздних версиях.
В Windows Vista и Windows Server 2008 функция NSPv2LookupServiceNextEx может использоваться только для операций с поставщиками NS_EMAIL пространств имен.
Поставщик передает структуру WSAQUERYSET2 в буфере lpqsResults . Клиент должен вызывать функцию NSPv2LookupServiceNextEx , пока не вернет WSA_E_NOMORE, указывая, что возвращены все WSAQUERYSET2 структуры.
DwControlFlags, указанные в этой функции, и те, которые указаны во время NSPv2LookupServiceBegin, обрабатываются как "ограничения" для целей сочетания. Ограничения объединяются между ограничениями во время NSPv2LookupServiceBegin и во время NSPv2LookupServiceNextEx . Таким образом, флаги NSPv2LookupServiceNextEx никогда не могут увеличить объем возвращаемых данных сверх того, что было запрошено в NSPv2LookupServiceBegin, хотя указание большего или меньшего количества флагов не является ошибкой. Флаги, указанные в заданном NSPv2LookupServiceNextEx , применяются только к данному вызову.
DwControlFlagsLUP_FLUSHPREVIOUS и LUP_RES_SERVICE являются исключениями из правила объединенных ограничений (так как они являются флагами поведения, а не флагами ограничений). Если в NSPv2LookupServiceNextEx используется какой-либо из флагов, они имеют определенный эффект независимо от настройки одних и того же флага в NSPv2LookupServiceBegin.
Например, если LUP_RETURN_VERSION указан в NSPv2LookupServiceBegin, поставщик услуг извлекает записи, включая версию. Если LUP_RETURN_VERSION не указан в NSPv2LookupServiceNextEx, возвращаемые сведения не включают версию, даже если она была доступна. Ошибка не возникает.
Кроме того, например, если LUP_RETURN_BLOB не указан в NSPv2LookupServiceBegin, но указан в NSPv2LookupServiceNextEx, возвращаемые сведения не включают частные данные. Ошибка не возникает.
Обычно функция NSPv2LookupServiceNextEx вызывается как минимум дважды. Первый раз для получения размера буфера, необходимого для получения WSAQUERYSET2 , на который указывает параметр lpqsResults , а второй — для получения фактического результирующий набор запроса. При первом вызове поставщик NSPv2 должен вернуть размер, необходимый для результатов WSAQUERYSET2 .
Структура WSAQUERYSET2 , на которую указывает возвращаемый параметр lpqsResults , полезна только в том же контексте процесса, так как несколько элементов в структуре WSAQUERYSET2 содержат указатели на фактические возвращаемые данные. Если результат запроса необходимо передать в другой процесс (например, с помощью RPC), необходимо будет сериализовать и маршалировать данные, возвращаемые в структуре WSAQUERYSET2 , на которую указывает параметр lpqsResults , включая данные, на которые указывают члены структуры WSAQUERYSET2 . Данные необходимо сериализовать в форме, которую можно передавать через границы процесса. Простой передачи копии структуры WSAQUERYSET2 недостаточно, так как будут передаваться только указатели на данные, а фактические данные будут недоступны для других процессов.
Результаты запроса
В следующей таблице перечислены WSAQUERYSET2 и описано, как результаты запроса представлены в структуре **WSAQUERYSET2**. Дополнительные сведения см. в разделе Структуры данных, связанные с запросами.имя члена WSAQUERYSET2 | Интерпретация результатов |
---|---|
**dwSize** | Размер структуры WSAQUERYSET2 в байтах. Используется в качестве механизма управления версиями. |
**lpszServiceInstanceName** | Строка, содержащая имя службы. |
**lpVersion** | Ссылается на номер версии конкретного экземпляра службы. |
**lpszComment** | Строка комментария, предоставляемая экземпляром службы. Этот член является необязательным и зависит от требований поставщика служб NSPv2. |
**dwNameSpace** | Идентификатор пространства имен, в котором было найдено имя или экземпляр службы. |
**lpNSProviderId** | Конкретный поставщик пространства имен, который предоставил этот результат запроса. |
**lpszContext** | Точка контекста в иерархическом пространстве имен, в котором находится служба. |
**dwNumberOfProtocols** | Этот член не определен для результатов. |
**lpafpProtocols** | Этот член не определен для результатов. Все необходимые сведения о протоколе содержатся в CSADDR_INFO структурах. |
**lpszQueryString** | Если dwControlFlags включает **LUP_RETURN_QUERY_STRING**, этот член возвращает необпараченный остаток **lpszServiceInstanceName**, указанный в исходном запросе. Например, в пространстве имен, которое идентифицирует службы по иерархическим именам, указывающим имя узла и путь к файлу в этом узле, возвращаемым адресом может быть адрес узла, а непараметризованный остаток может быть путем к файлу. Если **lpszServiceInstanceName** полностью проанализировано и используется **LUP_RETURN_QUERY_STRING**, этот член имеет значение NULL или указывает на строку нулевой длины. |
**dwNumberOfCsAddrs** | Количество элементов в массиве CSADDR_INFO структур. |
**lpcsaBuffer** | Указатель на массив CSADDR_INFO структур с одним полным транспортным адресом, содержащимся в каждом элементе. |
**dwOutputFlags** | Флаг **RESULT_IS_ALIAS** указывает, что это псевдоним результата. |
**lpBlob** | Указатель на сущность конкретного поставщика. Этот член является необязательным и зависит от требований поставщика службы NSPv2. |
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | ws2spi.h |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по