Udostępnij za pośrednictwem


Wyrejestrowywanie nazwy równorzędnego

Gdy wyrejestrujesz nazwę równorzędną, zarejestrowana nazwa zostanie usunięta z chmury protokołu rozpoznawania nazw równorzędnych (PNRP).

Wyrejestrowywanie nazwy równorzędnej

Aby wyrejestrować nazwę elementu równorzędnego, wywołaj WSASetService. Parametr essOperation musi mieć wartość RNRSERVICE_DELETE. Skorzystaj z wytycznych w poniższych sekcjach tego tematu, aby wprowadzić wymagane konfiguracje do parametrów WSASetService oraz struktury WSAQUERYSET.

Konfigurowanie usługi WSASetService

Gdy aplikacja wywołuje WSASetService, parametry muszą być skonfigurowane zgodnie z następującymi specyfikacjami:

  • essOperation musi mieć wartość RNRSERVICE_DELETE.
  • dwFlags musi mieć wartość zero (0).
  • lpqsRegInfo musi wskazywać na strukturę WSAQUERYSET, która musi zostać skonfigurowana przy użyciu wytycznych w poniższej sekcji tego tematu.

Konfigurowanie zestawu WSAQUERYSET

Struktura WSAQUERYSET musi być skonfigurowana zgodnie z następującymi specyfikacjami:

  • dwSize musi określać rozmiar struktury WSAQUERYSET.
  • lpszServiceInstanceName musi wskazywać nazwę elementu równorzędnego, która jest wyrejestrowana.
  • lpBlob musi wskazywać na strukturę PNRPINFO.
  • lpcsaBuffer musi wskazywać listę adresów.

Notatka

Pozostali członkowie są opisani w PNRP i WSASetService.

 

Przykład wyrejestrowania nazwy używkowej

Poniższy fragment kodu pokazuje, jak wyrejestrować nazwę równorzędną, podając poprawne informacje podczas wywoływania WSASetService, używając struktury 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;
}