PNRP 和 WSALookupServiceNext
PNRP 使用 WSALookupServiceNext 函数来匹配上一次调用 WSALookupServiceBegin 中指定的查询。 WSALookupServiceNext 函数的结果由初始 WSALookupServiceBegin 函数调用中传递的 WSAQUERYSET 结构中的设置确定。 此函数用于执行以下两个函数:
- 将对等名称解析为地址列表
- 枚举网络云
通过使用 WSANSPIoctl,可以异步使用查找服务。 有关异步使用查找服务函数的信息,请参阅 PNRP 和 WSANSPIoctl。
即使调用 WSANSPIoctl,WSALookupServiceNext 函数也会阻止。 在调用 WSALookupServiceNext 之前,应用程序必须等到收到通知(如果阻止是一个问题)。
将对等名称解析为地址列表
将对等名称解析为地址列表时,lpqsResults 参数中返回的 LPWSAQUERYSET 结构包含以下值:
-
dwSize
-
返回结构的大小。
-
lpszServiceInstanceName
-
如果指定 了LUP_RETURN_NAME、 LUP_RETURN_ALL或 NULL ,则返回对等名称。
-
lpServiceClassID
-
返回 SVCID_PNRPNAME。
-
lpVersion
-
返回 NULL。
-
lpszComment
-
如果指定 了LUP_RETURN_COMMENT、 LUP_RETURN_ALL或 NULL ,则返回注释。
-
dwNameSpace
-
返回 NS_PNRPNAME。
-
lpNSProviderID
-
返回 NS_PROVIDER_PNRPNAME。
-
lpszContext
-
如果指定 了LUP_RETURN_NAME、 LUP_RETURN_ALL或 NULL ,则返回云名称。
-
dwNumberOfProtocols
-
返回零 (0) 。
-
lpszQueryString
-
返回 NULL。
-
dwNumberOfCsAddrs
-
如果指定了LUP_RETURN_ADDR、LUP_RETURN_ALL或 NULL,则返回CSADDR_INFO数组中的条目数。 此值和 lpcsaBuffer 中的信息是此结构中返回的信息的关键位。
-
lpcsaBuffer
-
如果指定了LUP_RETURN_ADDR、LUP_RETURN_ALL或 NULL,则返回指向CSADDR_INFO结构的数组的指针。 此缓冲区和 dwNumberOfCsAddrs 中的值是此结构中返回的关键信息位。
-
dwOutputFlags
-
返回零 (0) 。
-
lpBlob
-
返回 NULL。
枚举网络云
枚举云时,lpqsResults 参数中返回的 LPWSAQUERYSET 结构包含以下值:
-
dwSize
-
返回结构的大小。
-
lpszServiceInstanceName
-
如果指定 了LUP_RETURN_NAME、 LUP_RETURN_ALL或 NULL ,则返回云名称。
-
lpServiceClassID
-
返回 SVCID_PNRPCLOUD。
-
lpVersion
-
返回 NULL。
-
lpszComment
-
返回 NULL。
-
dwNameSpace
-
返回 NS_PNRPCLOUD。
-
lpNSProviderID
-
返回 NS_PROVIDER_PNRPCLOUD。
-
lpszContext
-
返回 NULL。
-
dwNumberOfProtocols
-
返回零 (0) 。
-
lpszQueryString
-
返回 NULL。
-
dwNumberOfCsAddrs
-
返回零 (0) 。
-
lpcsaBuffer
-
返回 NULL。
-
dwOutputFlags
-
返回零 (0) 。
-
lpBlob
-
返回指向 BLOB 结构的指针,该结构指向 PNRPCLOUDINFO 结构(如果指定 了LUP_RETURN_BLOB、 LUP_RETURN_ALL或 NULL )。
PNRPCLOUDINFO 结构
枚举云名称时, PNRPCLOUDINFO 结构中会返回以下值:
-
dwSize
-
此结构的大小。
-
云
-
实际云值。
-
enCloudState
-
云的当前状态。 PNRP_CLOUD_STATE 指定有效值。
-
enCloudFlags
-
指示云名称在网络上有效,或仅在当前计算机上有效。 PNRP_CLOUD_FLAGS 指定有效值。 某些云名称在同一网络上的任何计算机上都有效。 其他云名称仅在当前计算机上有效,并且可能仅在一段时间内有效。
- 如果 enCloudFlags 设置为 PNRP_CLOUD_NAME_LOCAL, 则名称仅在本地有效。
- 如果未设置 enCloudFlags ,则可以将云名称传输到其他计算机。
相关主题