Отмена регистрации имени однорангового узла
При отмене регистрации имени однорангового узла зарегистрированное имя удаляется из облака PNRP.
Отмена регистрации имени однорангового узла
Чтобы отменить регистрацию имени однорангового узла, вызовите WSASetService. Параметр essOperation должен иметь значение RNRSERVICE_DELETE. Используйте рекомендации, приведенные в следующих разделах этого раздела, чтобы настроить необходимые конфигурации для параметров WSASetService и структуры WSAQUERYSET .
Настройка WSASetService
Когда приложение вызывает WSASetService, параметры должны быть настроены в соответствии со следующими спецификациями:
- essOperation должно иметь значение RNRSERVICE_DELETE.
- Значения dwFlags должны быть равны нулю (0).
- lpqsRegInfo должен указывать на структуру WSAQUERYSET , которую необходимо настроить с помощью рекомендаций, приведенных в следующем разделе этой статьи.
Настройка WSAQUERYSET
Структура WSAQUERYSET должна быть настроена в соответствии со следующими спецификациями:
- DwSize должен указать размер структуры WSAQUERYSET .
- Значение lpszServiceInstanceName должно указывать на имя однорангового узла, которое не зарегистрировано.
- lpBlob должен указывать на структуру PNRPINFO .
- lpcsaBuffer должен указывать на список адресов.
Примечание
Остальные элементы описаны в разделах PNRP и WSASetService.
Пример отмены регистрации имени однорангового узла
В следующем фрагменте кода показано, как отменить регистрацию имени однорангового узла, предоставив правильные сведения при вызове WSASetService с помощью структуры 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;
}