다음을 통해 공유


피어 이름 등록 취소

피어 이름을 등록 취소하면 등록된 이름이 PNRP(피어 이름 확인 프로토콜) 클라우드에서 제거됩니다.

피어 이름 등록 취소

피어 이름을 등록 취소하려면 WSASetService를 호출합니다. essOperation 매개 변수의 값은 RNRSERVICE_DELETE. 이 항목의 다음 섹션에 있는 지침을 사용하여 WSASetService 매개 변수 및 WSAQUERYSET 구조체에 필요한 구성을 만듭니다.

WSASetService 구성

애플리케이션이 WSASetService를 호출하는 경우 매개 변수는 다음 사양에 따라 구성되어야 합니다.

  • essOperation 의 값은 RNRSERVICE_DELETE.
  • dwFlags는 0이어야 합니다.
  • lpqsRegInfo 는 이 항목의 다음 섹션에 있는 지침을 사용하여 구성해야 하는 WSAQUERYSET 구조를 가리킵니다.

WSAQUERYSET 구성

WSAQUERYSET 구조체는 다음 사양에 따라 구성되어야 합니다.

  • dwSizeWSAQUERYSET 구조체의 크기를 지정해야 합니다.
  • lpszServiceInstanceName 은 등록 취소 중인 피어 이름을 가리킵니다.
  • lpBlobPNRPINFO 구조를 가리킵니다.
  • 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;
}