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


Функция обратного вызова LPNSPLOOKUPSERVICENEXT (ws2spi.h)

Функция NSPLookupServiceNext вызывается после получения дескриптора из предыдущего вызова NSPLookupServiceBegin для получения запрошенных сведений о службе.

Поставщик передает структуру WSAQUERYSET в буфер lpqsResults . Клиент должен вызывать эту функцию до тех пор, пока она не вернет WSA_E_NOMORE, указывая, что все WSAQUERYSET были возвращены.

Синтаксис

LPNSPLOOKUPSERVICENEXT Lpnsplookupservicenext;

INT Lpnsplookupservicenext(
  [in]      HANDLE hLookup,
  [in]      DWORD dwControlFlags,
  [in, out] LPDWORD lpdwBufferLength,
  [out]     LPWSAQUERYSETW lpqsResults
)
{...}

Параметры

[in] hLookup

Дескриптор, возвращенный из предыдущего вызова WSALookupServiceBegin.

[in] dwControlFlags

Флаги, используемые для управления следующей операцией. В настоящее время только LUP_FLUSHPREVIOUS определяется как средство обработки слишком большого результирующих наборов. Если приложение не может предоставить достаточно большой буфер, задание LUP_FLUSHPREVIOUS указывает поставщику отменить последний результирующий набор, который был слишком большим, и перейти к следующему набору для этого вызова.

[in, out] lpdwBufferLength

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

[out] lpqsResults

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

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

Функция должна возвращать NO_ERROR (ноль), если подпрограмма завершается успешно. Он должен вернуть SOCKET_ERROR (–1), если подпрограмма завершается сбоем, и она должна задать соответствующий код ошибки с помощью WSASetLastError.

Код ошибки Значение
WSA_E_CANCELLED
Во время обработки этого вызова был выполнен вызов NSPLookupServiceEnd . Звонок отменен. Данные в буфере lpqsResults не заданы.

В Windows Sockets 2 конфликтующие коды ошибок определяются для WSAECANCELLED (10103) и WSA_E_CANCELLED (10111). Код ошибки WSAECANCELLED будет удален в следующей версии и останется только WSA_E_CANCELLED. Поставщики пространств имен должны использовать код ошибки WSA_E_CANCELLED для обеспечения совместимости с максимально широким диапазоном приложений.

WSA_E_NO_MORE
Больше нет доступных данных.

В Windows Sockets 2 конфликтующие коды ошибок определяются для WSAENOMORE (10102) и WSA_E_NO_MORE (10110). Код ошибки WSAENOMORE будет удален в следующей версии и останется только WSA_E_NO_MORE. Поставщики пространств имен должны использовать код ошибки WSA_E_NO_MORE для обеспечения совместимости с максимально широким спектром приложений.

WSA_INVALID_HANDLE
Указанный дескриптор подстановки недопустим.
WSA_NOT_ENOUGH_MEMORY
Недостаточно памяти для выполнения этой операции.
WSAEFAULT
Буфер lpqsResults был слишком мал, чтобы содержать набор WSAQUERYSET .
WSAEINVAL
Один или несколько параметров недопустимы или отсутствуют для этого поставщика.
WSAEOPNOTSUPP
Операция не поддерживается. Эта ошибка возвращается, если поставщик пространства имен не реализует эту функцию.
WSANO_DATA
Имя было найдено в базе данных, но не было найдено данных, соответствующих заданным ограничениям.
WSASERVICE_NOT_FOUND
Служба неизвестна. Служба не найдена в указанном пространстве имен.

Комментарии

Объекты dwControlFlags, указанные в этой функции, и те, которые указаны во время NSPLookupServiceBegin , обрабатываются как ограничения для объединения. Ограничения объединяются между ограничениями во времени NSPLookupServiceBegin и ограничениями на NSPLookupServiceNext . Таким образом, флаги в NSPLookupServiceNext никогда не могут увеличить объем возвращаемых данных, превышающий запрошенный в NSPLookupServiceBegin, хотя указание большего или меньшего числа флагов не является ошибкой. Флаги, указанные в заданном NSPLookupServiceNext, применяются только к данному вызову.

LUP_FLUSHPREVIOUS и LUP_RES_SERVICEdwControlFlags являются исключениями из правила объединенных ограничений (так как они являются флагами поведения, а не флагами ограничений). Если в NSPLookupServiceNext используется любой из флагов, они имеют определенный эффект независимо от установки одинаковых флагов в NSPLookupServiceBegin.

Например, если LUP_RETURN_VERSION указано в NSPLookupServiceBegin, поставщик услуг извлекает записи, включая версию. Если LUP_RETURN_VERSION не указан в NSPLookupServiceNext, возвращаемые сведения не включают версию, даже если она была доступна. Ошибка не возникает.

Кроме того, если LUP_RETURN_BLOB не указан в NSPLookupServiceBegin, но указан в NSPLookupServiceNext, возвращаемые сведения не включают частные данные. Ошибка не возникает.

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

В следующей таблице приведен список 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 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header ws2spi.h

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

CSADDR_INFO

NSPLookupServiceBegin

NSPLookupServiceEnd

NSP_ROUTINE

WSAQUERYSET

WSASetLastError