PNRP 和 WSASetService

PNRP 使用 WSASetService 函数来注册或删除 对等名称

注册名称

注册包括一个对等名称和一组可以联系服务的终结点。 注册特定于 PNRP 云。 注册对等方后,注册和将注册信息传播到其他节点之间存在延迟。 在此期间,其他节点可能无法解析新注册的对等方。

服务注册不是永久性的。

  • 如果注册对等名称的客户端进程退出或调用 WSACleanup,则取消注册对等名称。
  • 如果指定的对等名称已由当前进程在同一个云中注册,则它将被替换为新的注册值。

注册对等名称时,必须指示以下参数值:

  • essOperation 参数的值必须为 RNRSERVICE_REGISTER
  • dwControlFlags 参数必须为零 (0) 。

注册对等名称时,lpqsRegInfo 参数引用的 LPWSAQUERYSET 结构必须包含以下值:

dwSize

指定此结构的大小。

lpszServiceInstanceName

指定要注册的对等名称。 如果 对等名称 不安全,则标识是可选的。 如果标识指定为 NULL,则 PNRP 默认使用计算机本地标识。

lpServiceClassID

必须SVCID_PNRPNAME。

lpVersion

已忽略。 设置为 NULL

lpszComment

已忽略。 但是,字符串仍需要少于 40 个字符,包括 NULL 终止符。

dwNameSpace

必须是 NS_PNRPNAMENS_ALL

lpNSProviderID

必须为 NS_PROVIDER_PNRPNAMENULL

lpszContext

必须是云名称、空字符串或 NULL。 如果此值为 NULL 或空字符串,则使用默认云“Global”。 否则,它必须指向有效的云名称。

dwNumberOfProtocols

已忽略。 将 设置为零 (0) 。

lpszQueryString

已忽略。 设置为 NULL

dwNumberOfCsAddrs

指定服务注册的地址数。 可以为单个名称注册的最大地址数为 10。

lpcsaBuffer

指向要注册的地址列表的指针。

dwOutputFlags

已忽略。 将 设置为零 (0) 。

lpBlob

指向指向 PNRPINFO 结构的 BLOB 结构的指针。 必须设置 PNRPINFO 结构中的特定参数。 有关详细信息,请参阅以下 PNRPINFO 结构部分。

PNRPINFO 结构

如果设置了 LPWSAQUERYSET 结构的 lpBlob 成员,则必须设置 PNRPINFO 结构的以下成员:

dwSize

指定此结构的大小。

lpwszIdentity

指定使用 PeerIdentityCreate 创建的对等名称的标识。 如果对等名称不安全,则标识是可选的。 如果标识指定为 NULL,则 PNRP 默认使用计算机本地标识。

nMaxResolve

已忽略。 将 设置为零 (0) 。

dwTimeout

已忽略。 将 设置为零 (0) 。

dwLifetime

指定刷新操作之间的秒数。

enResolveCriteria

已忽略。 将 设置为零 (0) 。

dwFlags

必须为零 (0) 或 PNRPINFO_HINT。 默认值为零 (0)。 这意味着 PNRP ID 的服务位置部分是使用 saHint 中的 IP 地址生成的。 否则,将使用 lpcsaBuffer 成员的第一个 IPv6 条目中的第一个 IP 地址生成服务位置。

saHint

指定提示的 IPv6 地址。

enNameState

已忽略。 将 设置为零 (0) 。

注销对等名称

以下列表标识了有关注销对等名称的重要信息。

  • 只有注册对等名称的应用程序才能取消注册。
  • 如果调用 WSACleanup ,则会自动取消注册对等名称。
  • PNRP 始终删除整个服务名称注册。 它不允许删除单个地址。
  • 注销名称时, essOperation 参数的值必须为 RNRSERVICE_DELETE
  • PNRP 不支持 值RNRSERVICE_DEREGISTER
  • dwControlFlags 参数必须为零 (0) 。

注销名称时,lpqsRegInfo 参数引用的 LPWSAQUERYSET 结构必须包含以下值:

dwSize

指定此结构的大小。

lpszServiceInstanceName

指定要注销的对等名称。

lpServiceClassID

必须 SVCID_PNRPNAME

lpVersion

已忽略。 设置为 NULL

lpszComment

已忽略。 设置为 NULL

dwNameSpace

必须是 NS_PNRPNAMENS_ALL

lpNSProviderID

必须为 NS_PROVIDER_PNRPNAMENULL

lpszContext

必须是云名称、空字符串或 NULL。 如果此值为 NULL 或空字符串,则使用默认云“Global”。 否则,它必须指向有效的云名称。

dwNumberOfProtocols

已忽略。 将 设置为零 (0) 。

lpszQueryString

已忽略。 设置为 NULL

dwNumberOfCsAddrs

已忽略。 设置为 NULL

lpcsaBuffer

已忽略。 设置为 NULL

dwOutputFlags

已忽略。 将 设置为零 (0) 。

lpBlob

指向指向 PNRPINFO 结构的 BLOB 结构的指针。 lpBlob 结构的 lpszIdentity 成员标识用于注册对等名称的标识的名称。 其余成员必须设置为注册名称时使用的相同值。

PNRP 和 BLOB

PNRP 和 WSAQUERYSET

PNRPINFO

PNRP NSP 错误代码

WSACleanup

WSASetService