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;
}