LPNSPLOOKUPSERVICENEXT 回调函数 (ws2spi.h)
NSPLookupServiceNext 函数是在从上一次调用 NSPLookupServiceBegin 获取句柄以检索请求的服务信息后调用的。
提供程序将在 lpqsResults 缓冲区中传递 WSAQUERYSET 结构。 客户端应调用此函数,直到返回 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(零)。 如果例程失败,并且必须使用 WSASetLastError设置相应的错误代码,则它应返回 SOCKET_ERROR (–1)。
错误代码 | 意义 |
---|---|
调用 NSPLookupServiceEnd 时,此调用仍在处理。 呼叫已取消。 未定义 lpqsResults 缓冲区中的数据。
在 Windows 套接字 2 中,WSAECANCELLED(10103)和 WSA_E_CANCELLED(10111)定义了冲突错误代码。WSAECANCELLED 的错误代码将在将来的版本中删除,并且只会保留WSA_E_CANCELLED。 Namespace提供程序应使用 WSA_E_CANCELLED 错误代码来保持与尽可能广泛的应用程序的兼容性。 |
|
没有更多可用数据。
在 Windows 套接字 2 中,为 WSAENOMORE (10102) 和 WSA_E_NO_MORE (10110) 定义冲突错误代码。WSAENOMORE 的错误代码将在将来的版本中删除,并且仅保留WSA_E_NO_MORE。 Namespace提供程序应使用 WSA_E_NO_MORE 错误代码来保持与尽可能广泛的应用程序的兼容性。 |
|
指定的查找句柄无效。 | |
没有足够的内存可用于执行此操作。 | |
lpqsResults 缓冲区太小,无法包含 WSAQUERYSET 集。 | |
此提供程序的一个或多个参数无效或缺失。 | |
不支持该操作。 如果命名空间提供程序未实现此函数,则返回此错误。 | |
该名称在数据库中找到,但没有与给定限制匹配的数据。 | |
服务未知。 无法在指定的命名空间中找到该服务。 |
言论
此函数中指定的
dwControlFlagsLUP_FLUSHPREVIOUS 和 LUP_RES_SERVICE 是组合限制规则的例外(因为它们是行为标志而不是“限制”标志)。 如果在 NSPLookupServiceNext中使用任一标志,则无论在 NSPLookupServiceBegin设置相同的标志,它们都具有定义的效果。
例如,如果在 NSPLookupServiceBegin指定了 LUP_RETURN_VERSION,则服务提供商将检索包括版本在内的记录。 如果未在 NSPLookupServiceNext指定 LUP_RETURN_VERSION,则返回的信息不包括版本,即使它可用。 不会生成任何错误。
例如,如果未在 NSPLookupServiceBegin指定 LUP_RETURN_BLOB,但在 NSPLookupServiceNext指定,则返回的信息不包括专用数据。 不会生成任何错误。
查询结果
下表列出了 WSAQUERYSET,并介绍了如何在 WSAQUERYSET 结构中表示查询结果。 有关详细信息,请参阅 Query-Related 数据结构。WSAQUERYSET 成员名称 | 结果解释 |
---|---|
**dwSize** | 将设置为 sizeof(WSAQUERYSET)。 这用作版本控制机制。 |
**dwOutputFlags** | **RESULT_IS_ALIAS** 标志指示这是别名结果。 |
**lpszServiceInstanceName** | 引用包含服务名称的字符串。 |
**lpServiceClassId** | 对应于服务类的 GUID。 |
**lpVersion** | 引用特定服务实例的版本号。 |
**lpszComment** | 自选。 服务实例提供的注释字符串。 |
**dwNameSpace** | 在其中找到服务实例的Namespace。 |
**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 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | ws2spi.h |