Bagikan melalui


Membatalkan pendaftaran Nama Serekan

Saat Anda membatalkan pendaftaran nama serekan, nama terdaftar dihapus dari cloud Peer Name Resolution Protocol (PNRP).

Membatalkan pendaftaran Nama Serekan

Untuk membatalkan pendaftaran nama serekan, panggil WSASetService. Parameter essOperation harus memiliki nilai RNRSERVICE_DELETE. Gunakan panduan di bagian berikut dari topik ini untuk membuat konfigurasi yang diperlukan ke parameter WSASetService dan struktur WSAQUERYSET .

Mengonfigurasi WSASetService

Saat aplikasi memanggil WSASetService, parameter harus dikonfigurasi sesuai dengan spesifikasi berikut:

  • essOperation harus memiliki nilai RNRSERVICE_DELETE.
  • dwFlags harus nol (0).
  • lpqsRegInfo harus menunjuk ke struktur WSAQUERYSET , yang harus dikonfigurasi dengan menggunakan pedoman di bagian berikut dari topik ini.

Mengonfigurasi WSAQUERYSET

Struktur WSAQUERYSET harus dikonfigurasi sesuai dengan spesifikasi berikut:

  • dwSize harus menentukan ukuran struktur WSAQUERYSET .
  • lpszServiceInstanceName harus menunjuk ke nama serekan yang tidak terdaftar.
  • lpBlob harus menunjuk ke struktur PNRPINFO .
  • lpcsaBuffer harus menunjuk ke daftar alamat.

Catatan

Anggota yang tersisa dijelaskan dalam PNRP dan WSASetService.

 

Contoh Membatalkan Pendaftaran Nama Serekan

Cuplikan kode berikut menunjukkan kepada Anda cara membatalkan pendaftaran nama serekan dengan memberikan informasi yang benar saat memanggil WSASetService menggunakan struktur 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;
}