Поделиться через


Функция WSALookupServiceNextA (winsock2.h)

Функция WSALookupServiceNex t вызывается после получения дескриптора из предыдущего вызова 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 и могут быть сочетанием следующих параметров.

Флаг Значение
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 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. Этот новый буфер для WSAQUERYSET должен иметь некоторые члены WSAQUERYSET перед вызов ом функции WSALookupServiceNext. Как минимум, dwSize член WSAQUERYSET должен иметь новый размер буфера.

Результаты запроса

В следующей таблице описывается, как результаты запроса представлены в структуре 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: функция WSALookupServiceNext W поддерживается для приложений Магазина 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]
целевая платформа Виндоус
заголовка winsock2.h
библиотеки Ws2_32.lib
DLL Ws2_32.dll

См. также

Bluetooth и WSALookupServiceNext

WSALookupServiceBegin

WSALookupServiceEnd

WSAQUERYSET

Функции Winsock

Справочник Winsock