PNRP und WSASetService

PNRP verwendet die WSASetService-Funktion, um Peernamenzu registrieren oder zu entfernen.

Registrieren eines Namens

Die Registrierung umfasst einen Peernamen und eine Gruppe von Endpunkten, mit denen ein Dienst kontaktiert werden kann. Eine Registrierung ist spezifisch für eine PNRP-Cloud. Nach der Registrierung eines Peers kommt es zu einer Verzögerung zwischen der Registrierung und der Weitergabe der Registrierungsinformationen an andere Knoten. Während dieser Zeit können andere Knoten einen neu registrierten Peer möglicherweise nicht auflösen.

Die Dienstregistrierung ist nicht persistent.

  • Wenn ein Clientprozess, der einen Peernamen registriert, beendet wird oder WSACleanupaufruft, wird die Registrierung des Peernamens aufgehoben.
  • Wenn ein angegebener Peername bereits durch den aktuellen Prozess in derselben Cloud registriert ist, wird er durch neue Registrierungswerte ersetzt.

Beim Registrieren eines Peernamens müssen die folgenden Parameterwerte angegeben werden:

  • Der essOperation-Parameter muss den Wert RNRSERVICE _ REGISTER aufweisen.
  • Der dwControlFlags-Parameter muss 0 (null) sein.

Beim Registrieren eines Peernamens muss die LPWSAQUERYSET-Struktur, auf die der lpqsRegInfo-Parameter verweist, die folgenden Werte enthalten:

dwSize

Gibt die Größe dieser Struktur an.

lpszServiceInstanceName

Gibt einen zu registrierenden Peernamen an. Wenn der Peername nicht gesichert ist, ist die Identität optional. Wenn die Identität als NULL angegeben ist, verwendet PNRP standardmäßig die lokale Identität des Computers.

lpServiceClassID

Muss SVCID _ PNRPNAME sein.

lpVersion

Ignoriert. Legen Sie auf NULL fest.

lpszComment

Ignoriert. Die Zeichenfolge muss jedoch immer noch weniger als 40 Zeichen umfassen, einschließlich des NULL-Abschlusszeichens.

dwNameSpace

Muss entweder NS _ PNRPNAME oder NS _ ALL sein.

lpNSProviderID

Muss entweder NS _ PROVIDER _ PNRPNAME oder NULL sein.

lpszContext

Muss ein Cloudname, eine leere Zeichenfolge oder NULL sein. Wenn dieser Wert NULL oder eine leere Zeichenfolge ist, wird die Standardcloud "Global" verwendet. Andernfalls muss er auf einen gültigen Cloudnamen verweisen.

dwNumberOfProtocols

Ignoriert. Auf 0 (null) festgelegt.

lpszQueryString

Ignoriert. Legen Sie auf NULL fest.

dwNumberOfCsAddrs

Gibt die Anzahl der von einem Dienst registrierten Adressen an. Die maximale Anzahl von Adressen, die für einen einzelnen Namen registriert werden können, beträgt 10.

lpcsaBuffer

Zeiger auf eine Liste der zu registrierende Adressen.

dwOutputFlags

Ignoriert. Auf 0 (null) festgelegt.

lpBlob

Zeiger auf eine BLOB-Struktur, die auf eine PNRPINFO-Struktur zeigt. Bestimmte Parameter in der PNRPINFO-Struktur müssen festgelegt werden. Weitere Informationen finden Sie im folgenden Abschnitt PNRPINFO-Struktur.

PNRPINFO-Struktur

Wenn der lpBlob-Member der LPWSAQUERYSET-Struktur festgelegt ist, müssen die folgenden Member der PNRPINFO-Struktur festgelegt werden:

dwSize

Gibt die Größe dieser Struktur an.

lpwszIdentity

Gibt die Identität des Peernamens an, der mit PeerIdentityCreateerstellt wird. Wenn ein Peername nicht gesichert ist, ist die Identität optional. Wenn die Identität als NULL angegeben ist, verwendet PNRP standardmäßig die lokale Identität des Computers.

nMaxResolve

Ignoriert. Auf 0 (null) festgelegt.

dwTimeout

Ignoriert. Auf 0 (null) festgelegt.

dwLifetime

Gibt die Anzahl von Sekunden zwischen Aktualisierungsvorgängen an.

enResolveCriteria

Ignoriert. Auf 0 (null) festgelegt.

Dwflags

Muss entweder null (0) oder PNRPINFO _ HINT sein. Der Standardwert ist null (0). Dies bedeutet, dass der Dienstidentifikationsteil der PNRP-ID mithilfe der IP-Adresse in saHint erstellt wird. Andernfalls wird der Dienstspeicherort mithilfe der ersten IP-Adresse im ersten IPv6-Eintrag des lpcsaBuffer-Members erstellt.

saHint

Gibt die IPv6-Adresse für den Hinweis an.

enNameState

Ignoriert. Auf 0 (null) festgelegt.

Aufheben der Registrierung eines Peernamens

In der folgenden Liste sind die wichtigen Informationen zum Aufheben der Registrierung eines Peernamens aufgeführt.

  • Nur eine Anwendung, die einen Peernamen registriert, kann die Registrierung aufheben.
  • Die Registrierung eines Peernamens wird automatisch aufgehoben, wenn WSACleanup aufgerufen wird.
  • PNRP entfernt immer die gesamte Dienstnamenregistrierung. Das Entfernen einzelner Adressen ist nicht zulässig.
  • Wenn Sie die Registrierung eines Namens aufheben, muss der essOperation-Parameter den Wert RNRSERVICE _ DELETE aufweisen.
  • PNRP unterstützt den Wert RNRSERVICE _ DEREGISTER nicht.
  • Der dwControlFlags-Parameter muss 0 (null) sein.

Beim Aufheben der Registrierung eines Namens muss die LPWSAQUERYSET-Struktur, auf die der lpqsRegInfo-Parameter verweist, die folgenden Werte enthalten:

dwSize

Gibt die Größe dieser Struktur an.

lpszServiceInstanceName

Gibt einen Peernamen an, der die Registrierung aufheben soll.

lpServiceClassID

Muss SVCID _ PNRPNAME sein.

lpVersion

Ignoriert. Legen Sie auf NULL fest.

lpszComment

Ignoriert. Legen Sie auf NULL fest.

dwNameSpace

Muss entweder NS _ PNRPNAME oder NS _ ALL sein.

lpNSProviderID

Muss entweder NS _ PROVIDER _ PNRPNAME oder NULL sein.

lpszContext

Muss ein Cloudname, eine leere Zeichenfolge oder NULL sein. Wenn dieser Wert NULL oder eine leere Zeichenfolge ist, wird die Standardcloud "Global" verwendet. Andernfalls muss er auf einen gültigen Cloudnamen verweisen.

dwNumberOfProtocols

Ignoriert. Wird auf 0 (null) festgelegt.

lpszQueryString

Ignoriert. Legen Sie auf NULL fest.

dwNumberOfCsAddrs

Ignoriert. Legen Sie auf NULL fest.

lpcsaBuffer

Ignoriert. Legen Sie auf NULL fest.

dwOutputFlags

Ignoriert. Wird auf 0 (null) festgelegt.

lpBlob

Zeiger auf eine BLOB-Struktur, die auf eine PNRPINFO-Struktur zeigt. Der lpszIdentity-Member der lpBlob-Struktur identifiziert den Namen der Identität, die zum Registrieren eines Peernamens verwendet wird. Die verbleibenden Member müssen auf die gleichen Werte festgelegt werden, die beim Registrieren eines Namens verwendet werden.

PNRP und BLOB

PNRP und WSAQUERYSET

PNRPINFO

PNRP-NSP-Fehlercodes

WSACleanup

WSASetService