取消註冊對等名稱
當您取消註冊對等名稱時,會將已註冊的名稱從對等名稱解析通訊協定 (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;
}