PNRP 和 WSASetService

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

注册名称

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

服务注册不是永久性的。

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

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

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

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

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)。 这意味着,使用 saHint中的 IP 地址生成 PNRP ID 的服务位置部分。 否则,服务位置是使用 lpcsaBuffer 成员的第一个 IPv6 条目中的第一个 IP 地址生成的。

saHint

指定提示的 IPv6 地址。

enNameState

忽视。 设置为零(0)。

取消注册对等名称

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

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

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

dwSize

指定此结构的大小。

lpszServiceInstanceName

指定要注销的对等名称。

lpServiceClassID

必须是 SVCID_PNRPNAME

lpVersion

忽视。 设置为 NULL

lpszComment

忽视。 设置为 NULL

dwNameSpace

必须是 NS_PNRPNAMENS_ALL

lpNSProviderID

必须是 NS_PROVIDER_PNRPNAMENULL

lpszContext

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

dwNumberOfProtocols

忽视。 设置为零(0)。

lpszQueryString

忽视。 设置为 NULL

dwNumberOfCsAddrs

忽视。 设置为 NULL

lpcsaBuffer

忽视。 设置为 NULL

dwOutputFlags

忽视。 设置为零(0)。

lpBlob

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

PNRP 和 BLOB

PNRP 和 WSAQUERYSET

PNRPINFO

PNRP NSP 错误代码

WSACleanup

WSASetService