피어 이름 등록 취소
피어 이름을 등록 취소하면 등록된 이름이 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에 설명되어 있습니다.
피어 이름 등록 취소의 예
다음 코드 조각에서는 WSAQUERYSET 구조를 사용하여 WSASetService를 호출할 때 올바른 정보를 제공하여 피어 이름을 등록 취소하는 방법을 보여 줍니다.
#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;
}