Wyrejestrowywanie nazwy równorzędnego
Gdy wyrejestrujesz nazwę równorzędną, zarejestrowana nazwa zostanie usunięta z chmury protokołu rozpoznawania nazw równorzędnych (PNRP).
Wyrejestrowywanie nazwy równorzędnej
Aby wyrejestrować nazwę elementu równorzędnego, wywołaj WSASetService. Parametr essOperation musi mieć wartość RNRSERVICE_DELETE. Skorzystaj z wytycznych w poniższych sekcjach tego tematu, aby wprowadzić wymagane konfiguracje do parametrów WSASetService oraz struktury WSAQUERYSET.
Konfigurowanie usługi WSASetService
Gdy aplikacja wywołuje WSASetService, parametry muszą być skonfigurowane zgodnie z następującymi specyfikacjami:
- essOperation musi mieć wartość RNRSERVICE_DELETE.
- dwFlags musi mieć wartość zero (0).
- lpqsRegInfo musi wskazywać na strukturę WSAQUERYSET, która musi zostać skonfigurowana przy użyciu wytycznych w poniższej sekcji tego tematu.
Konfigurowanie zestawu WSAQUERYSET
Struktura WSAQUERYSET musi być skonfigurowana zgodnie z następującymi specyfikacjami:
- dwSize musi określać rozmiar struktury WSAQUERYSET.
- lpszServiceInstanceName musi wskazywać nazwę elementu równorzędnego, która jest wyrejestrowana.
- lpBlob musi wskazywać na strukturę PNRPINFO.
- lpcsaBuffer musi wskazywać listę adresów.
Notatka
Pozostali członkowie są opisani w PNRP i WSASetService.
Przykład wyrejestrowania nazwy używkowej
Poniższy fragment kodu pokazuje, jak wyrejestrować nazwę równorzędną, podając poprawne informacje podczas wywoływania WSASetService, używając struktury WSAQUERYSET.
#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;
}