Функция 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 Значение
LUP_DEEP
0x0001
Запросы глубокие, а не только на первом уровне.
LUP_CONTAINERS
0x0002
Возвращает только контейнеры.
LUP_NOCONTAINERS
0x0004
Не возвращайте контейнеры.
LUP_NEAREST
0x0008
Если возможно, возвращает результаты в порядке расстояния. Мера расстояния зависит от поставщика.
LUP_RETURN_NAME
0x0010
Извлекает имя lpszServiceInstanceName.
LUP_RETURN_TYPE
0x0020
Извлекает тип lpServiceClassId.
LUP_RETURN_VERSION
0x0040
Извлекает версию как lpVersion.
LUP_RETURN_COMMENT
0x0080
Извлекает комментарий как lpszComment.
LUP_RETURN_ADDR
0x0100
Извлекает адреса в виде lpcsaBuffer.
LUP_RETURN_BLOB
0x0200
Извлекает частные данные в виде lpBlob.
LUP_RETURN_ALIASES
0x0400
Все доступные сведения о псевдониме должны возвращаться в последовательных вызовах WSALookupServiceNext, и для каждого возвращенного псевдонима будет установлен флаг RESULT_IS_ALIAS.
LUP_RETURN_QUERY_STRING
0x0800
Извлекает строку запроса, используемую для запроса.
LUP_RETURN_ALL
0x0FF0
Набор флагов, который извлекает все значения LUP_RETURN_*.
LUP_FLUSHPREVIOUS
0x1000
Используется в качестве значения параметра dwControlFlags в WSALookupServiceNext. Установка этого флага указывает поставщику отменить последний результирующий набор, который был слишком большим для указанного буфера, и перейти к следующему результирующем набору.
LUP_FLUSHCACHE
0x2000
Если поставщик кэширования сведений, игнорирует кэш и запрашивает само пространство имен.
LUP_RES_SERVICE
0x8000
Это указывает, находится ли основной ответ в удаленной или локальной части структуры CSADDR_INFO . Другая часть должна быть пригодна для использования в любом случае.

[in, out] lpdwBufferLength

Количество байтов, содержащихся в буфере, на который указывает lpqsResults. В выходных данных, если функция завершается с ошибкой WSAEFAULT, она содержит минимальное количество байтов, которые необходимо передать для получения записи lpqsResults .

[out] lpqsResults

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

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

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

Код ошибки Значение
WSA_E_CANCELLED
Во время обработки этого вызова был выполнен вызов WSALookupServiceEnd . Звонок отменен. Данные в буфере lpqsResults неопределенны. В сокетах Windows версии 2 конфликтующие коды ошибок определяются для WSAECANCELLED (10103) и WSA_E_CANCELLED (10111). Код ошибки WSAECANCELLED будет удален в следующей версии и останется только WSA_E_CANCELLED. Однако для сокетов Windows версии 2 приложения должны проверка как для WSAECANCELLED, так и для WSA_E_CANCELLED для максимально широкой совместимости с поставщиками пространства имен, которые используют любой из них.
WSA_E_NO_MORE
Больше нет доступных данных. В сокетах Windows версии 2 конфликтующие коды ошибок определяются для WSAENOMORE (10102) и WSA_E_NO_MORE (10110). Код ошибки WSAENOMORE будет удален в следующей версии и останется только WSA_E_NO_MORE. Однако для сокетов Windows версии 2 приложения должны проверка как для WSAENOMORE, так и для WSA_E_NO_MORE для максимально широкой совместимости с поставщиками пространства имен, которые используют любой из них.
WSAEFAULT
Буфер lpqsResults был слишком мал, чтобы содержать набор WSAQUERYSET .
WSAEINVAL
Один или несколько обязательных параметров были недопустимыми или отсутствуют.
WSA_INVALID_HANDLE
Указанный дескриптор подстановки недопустим.
WSANOTINITIALISED
WS2_32.DLL не инициализирована. Приложение должно сначала вызвать WSAStartup , прежде чем вызывать функции Сокетов Windows.
WSANO_DATA
Имя найдено в базе данных, но данные, соответствующие заданным ограничениям, не найдены.
WSA_NOT_ENOUGH_MEMORY
Недостаточно памяти для выполнения операции.

Комментарии

Параметр 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

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

Bluetooth и WSALookupServiceNext

WSALookupServiceBegin

WSALookupServiceEnd

WSAQUERYSET

Функции Winsock

Справочник по Winsock