Freigeben über


Aufheben der Registrierung eines Peernamens

Wenn Sie die Registrierung eines Peernamens aufheben, wird ein registrierter Name aus einer PNRP-Cloud (Peer Name Resolution Protocol) entfernt.

Aufheben der Registrierung eines Peernamens

Rufen Sie WSASetService auf, um die Registrierung eines Peernamens aufzuheben. Der Parameter essOperation muss über den Wert RNRSERVICE_DELETE verfügen. Verwenden Sie die Richtlinien in den folgenden Abschnitten dieses Themas, um die erforderlichen Konfigurationen für die WSASetService-Parameter und die WSAQUERYSET-Struktur vorzunehmen.

Konfigurieren von WSASetService

Wenn eine Anwendung WSASetService aufruft, müssen die Parameter gemäß den folgenden Spezifikationen konfiguriert werden:

  • essOperation muss den Wert RNRSERVICE_DELETE haben.
  • dwFlags muss null (0) sein.
  • lpqsRegInfo muss auf eine WSAQUERYSET-Struktur verweisen, die mithilfe der Richtlinien im folgenden Abschnitt dieses Themas konfiguriert werden muss.

Konfigurieren von WSAQUERYSET

Die WSAQUERYSET-Struktur muss gemäß den folgenden Spezifikationen konfiguriert werden:

  • dwSize muss die Größe der WSAQUERYSET-Struktur angeben.
  • lpszServiceInstanceName muss auf den Peernamen verweisen, der nicht registriert wird.
  • lpBlob muss auf eine PNRPINFO-Struktur verweisen.
  • lpcsaBuffer muss auf die Adressliste verweisen.

Hinweis

Die verbleibenden Member werden unter PNRP und WSASetService beschrieben.

 

Ein Beispiel für das Aufheben der Registrierung eines Peernamens

Der folgende Codeausschnitt zeigt, wie Sie die Registrierung eines Peernamens aufheben, indem Sie die richtigen Informationen beim Aufrufen von WSASetService mithilfe der WSAQUERYSET-Struktur bereitstellen.

#define UNICODE
#include <initguid.h>
#include <p2p.h>

#pragma comment(lib, "ws2_32.lib")

//-------------------------------------------------------------------------
// Function: PnrpUnregister
//
// Purpose:  Unregister the given name from a PNRP cloud
//
// Arguments:
//   pwzIdentity : identity string originally used to register the name
//   pwzName     : name to unregister from PNRP
//   pwzCloud    : name of the cloud to unregister from, NULL = global cloud
//
// Returns:  HRESULT
//
HRESULT PnrpUnregister(PWSTR pwzIdentity, PWSTR pwzName, PWSTR pwzCloud)
{
    HRESULT         hr = S_OK;
    PNRPINFO        pnrpInfo = {0};
    BLOB            blPnrpData = {0};
    WSAQUERYSET     querySet = {0};
    INT             iRet;

    //
    // build the WSAQUERYSET required to unregister
    //
    pnrpInfo.dwSize = sizeof(pnrpInfo);
    pnrpInfo.dwLifetime = 60 * 60 * 8; // 8 hours
    pnrpInfo.lpwszIdentity = pwzIdentity;

    blPnrpData.cbSize = sizeof(pnrpInfo);
    blPnrpData.pBlobData = (BYTE*)&pnrpInfo;

    querySet.dwSize = sizeof(querySet);
    querySet.dwNameSpace = NS_PNRPNAME;
    querySet.lpServiceClassId = (LPGUID)&SVCID_PNRPNAME;
    querySet.lpszServiceInstanceName = pwzName;
    querySet.lpszContext = pwzCloud;
    querySet.lpBlob = &blPnrpData;

    // unregister the name with PNRP
    iRet = WSASetService(&querySet, RNRSERVICE_DELETE, 0);
    if (iRet != 0)
    {
        hr = HRESULT_FROM_WIN32(WSAGetLastError());
    }

    return hr;
}