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


Функция обратного вызова 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 2 конфликтующие коды ошибок определяются для WSAECANCELLED (10103) и WSA_E_CANCELLED (10111). Код ошибки WSAECANCELLED будет удален в будущей версии и останется только WSA_E_CANCELLED. Поставщики пространств имен должны использовать код ошибки WSA_E_CANCELLED для обеспечения совместимости с самым широким спектром приложений.

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

В Сокетах Windows 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, применяются только к такому вызову.

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

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

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

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

В следующей таблице перечислены WSAQUERYSET и описывается, как результаты запроса представлены в структуре WSAQUERYSET. Дополнительные сведения см. в Query-Related структурах данных.
Имя члена 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 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка ws2spi.h

См. также

CSADDR_INFO

NSPLookupServiceBegin

NSPLookupServiceEnd

NSP_ROUTINE

WSAQUERYSET

WSASetLastError