Функция WSALookupServiceNextA (winsock2.h)
Функция WSALookupServiceNext вызывается после получения дескриптора из предыдущего вызова WSALookupServiceBegin для получения запрошенных сведений о службе.
Поставщик передаст обратно структуру WSAQUERYSET в буфере lpqsResults . Клиент должен продолжать вызывать эту функцию, пока не вернет WSA_E_NO_MORE, указывая, что все WSAQUERYSET были возвращены.
Синтаксис
INT WSAAPI WSALookupServiceNextA(
[in] HANDLE hLookup,
[in] DWORD dwControlFlags,
[in, out] LPDWORD lpdwBufferLength,
[out] LPWSAQUERYSETA lpqsResults
);
Параметры
[in] hLookup
Дескриптор, возвращенный при предыдущем вызове WSALookupServiceBegin.
[in] dwControlFlags
Набор флагов, управляющий операцией. Значения, передаваемые в параметре dwControlFlags функции WSALookupServiceBegin , определяют возможные критерии. Все значения, передаваемые в параметре dwControlFlags в функцию WSALookupServiceNext , дополнительно ограничивают критерии для поиска службы.
В настоящее время LUP_FLUSHPREVIOUS определяется как средство для решения слишком большого результирующих наборов. Если приложение не предоставляет (или не может) предоставить достаточно большой буфер, установка LUP_FLUSHPREVIOUS указывает поставщику отменить последний результирующий набор ( который был слишком большим) и перейти к следующему набору для этого вызова.
Поддерживаемые значения для параметра dwControlFlags определяются в файле заголовка Winsock2.h и могут быть комбинацией следующих параметров.
Flag | Значение |
---|---|
|
Запросы глубокие, а не только на первом уровне. |
|
Возвращает только контейнеры. |
|
Не возвращайте контейнеры. |
|
Если возможно, возвращает результаты в порядке расстояния. Мера расстояния зависит от поставщика. |
|
Извлекает имя lpszServiceInstanceName. |
|
Извлекает тип lpServiceClassId. |
|
Извлекает версию как lpVersion. |
|
Извлекает комментарий как lpszComment. |
|
Извлекает адреса в виде lpcsaBuffer. |
|
Извлекает частные данные в виде lpBlob. |
|
Все доступные сведения о псевдониме должны возвращаться в последовательных вызовах WSALookupServiceNext, и для каждого возвращенного псевдонима будет установлен флаг RESULT_IS_ALIAS. |
|
Извлекает строку запроса, используемую для запроса. |
|
Набор флагов, который извлекает все значения LUP_RETURN_*. |
|
Используется в качестве значения параметра dwControlFlags в WSALookupServiceNext. Установка этого флага указывает поставщику отменить последний результирующий набор, который был слишком большим для указанного буфера, и перейти к следующему результирующем набору. |
|
Если поставщик кэширования сведений, игнорирует кэш и запрашивает само пространство имен. |
|
Это указывает, находится ли основной ответ в удаленной или локальной части структуры CSADDR_INFO . Другая часть должна быть пригодна для использования в любом случае. |
[in, out] lpdwBufferLength
Количество байтов, содержащихся в буфере, на который указывает lpqsResults. В выходных данных, если функция завершается с ошибкой WSAEFAULT, она содержит минимальное количество байтов, которые необходимо передать для получения записи lpqsResults .
[out] lpqsResults
Указатель на блок памяти, который будет содержать один результирующий набор в структуре WSAQUERYSET при возврате.
Возвращаемое значение
Возвращаемое значение равно нулю, если операция прошла успешно. В противном случае возвращается значение SOCKET_ERROR, а определенный номер ошибки можно получить, вызвав WSAGetLastError.
Код ошибки | Значение |
---|---|
Во время обработки этого вызова был выполнен вызов WSALookupServiceEnd . Звонок отменен. Данные в буфере lpqsResults неопределенны. В сокетах Windows версии 2 конфликтующие коды ошибок определяются для WSAECANCELLED (10103) и WSA_E_CANCELLED (10111). Код ошибки WSAECANCELLED будет удален в следующей версии и останется только WSA_E_CANCELLED. Однако для сокетов Windows версии 2 приложения должны проверка как для WSAECANCELLED, так и для WSA_E_CANCELLED для максимально широкой совместимости с поставщиками пространства имен, которые используют любой из них. | |
Больше нет доступных данных. В сокетах Windows версии 2 конфликтующие коды ошибок определяются для WSAENOMORE (10102) и WSA_E_NO_MORE (10110). Код ошибки WSAENOMORE будет удален в следующей версии и останется только WSA_E_NO_MORE. Однако для сокетов Windows версии 2 приложения должны проверка как для WSAENOMORE, так и для WSA_E_NO_MORE для максимально широкой совместимости с поставщиками пространства имен, которые используют любой из них. | |
Буфер lpqsResults был слишком мал, чтобы содержать набор WSAQUERYSET . | |
Один или несколько обязательных параметров были недопустимыми или отсутствуют. | |
Указанный дескриптор подстановки недопустим. | |
WS2_32.DLL не инициализирована. Приложение должно сначала вызвать WSAStartup , прежде чем вызывать функции Сокетов Windows. | |
Имя найдено в базе данных, но данные, соответствующие заданным ограничениям, не найдены. | |
Недостаточно памяти для выполнения операции. |
Комментарии
Параметр dwControlFlags, указанный в этой функции, и параметры, указанные во время WSALookupServiceBegin , рассматриваются как ограничения для целей сочетания. Ограничения объединяются между ограничениями во время WSALookupServiceBegin и WSALookupServiceNext . Поэтому флаги в WSALookupServiceNext никогда не могут увеличить объем возвращаемых данных сверх того, что было запрошено в WSALookupServiceBegin, хотя указание большего или меньшего количества флагов не является ошибкой. Флаги, указанные в заданном объекте WSALookupServiceNext , применяются только к данному вызову.
DwControlFlags LUP_FLUSHPREVIOUS и LUP_RES_SERVICE являются исключениями из правила объединенных ограничений (так как они являются флагами поведения, а не флагами ограничений). Если какой-либо из этих флагов используется в WSALookupServiceNext , они имеют определенный эффект независимо от настройки одних и того же флага в WSALookupServiceBegin.
Например, если LUP_RETURN_VERSION указан в WSALookupServiceBegin , поставщик служб извлекает записи, включая версию. Если LUP_RETURN_VERSION не указан в WSALookupServiceNext, возвращаемые сведения не включают версию, даже если она была доступна. Ошибка не возникает.
Например, если LUP_RETURN_BLOB не указан в WSALookupServiceBegin , но указан в WSALookupServiceNext, возвращаемые сведения не включают частные данные. Ошибка не возникает.
Если функция WSALookupServiceNext завершается сбоем с ошибкой WSAEFAULT, это означает, что буфер, на который указывает параметр lpqsResults, был слишком мал, чтобы содержать результаты запроса. Новый буфер для WSAQUERYSET должен быть предоставлен с размером, заданным значением, на которое указывает параметр lpdwBufferLength . Перед повторным вызовом функции WSALookupServiceNext в этом новом буфере для WSAQUERYSET должны быть указаны некоторые члены WSAQUERYSET. Как минимум, члену dwSizeWSAQUERYSET необходимо задать новый размер буфера.
Результаты запроса
В следующей таблице описано, как результаты запроса представлены в структуре WSAQUERYSET .Член WSAQUERYSET | Интерпретация результатов |
---|---|
dwSize | Будет задано значение sizeof( WSAQUERYSET). Используется в качестве механизма управления версиями. |
dwOutputFlags | RESULT_IS_ALIAS флаг указывает, что это результат псевдонима. |
lpszServiceInstanceName | Указанная строка содержит имя службы. |
lpServiceClassId | Идентификатор GUID, соответствующий классу службы. |
lpVersion | Ссылается на номер версии конкретного экземпляра службы. |
lpszComment | Необязательная строка комментария, заданная экземпляром службы. |
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 структур с одним полным транспортным адресом, содержащимся в каждом элементе. |
lpBlob | (Необязательно) Это указатель на сущность поставщика. |
Windows Phone 8. Функция WSALookupServiceNextW поддерживается для приложений Магазина Windows Phone Windows Phone 8 и более поздних версий.
Windows 8.1 и Windows Server 2012 R2: функция WSALookupServiceNextW поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версий.
Примечание
Заголовок winsock2.h определяет WSALookupServiceNext как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 8.1, Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winsock2.h |
Библиотека | Ws2_32.lib |
DLL | Ws2_32.dll |