Condividi tramite


Annullamento della registrazione di un nome peer

Quando si annulla la registrazione di un nome peer, un nome registrato viene rimosso da un cloud PNRP (Peer Name Resolution Protocol).

Annullare la registrazione di un nome peer

Per annullare la registrazione di un nome peer, chiamare WSASetService. Il parametro essOperation deve avere un valore RNRSERVICE_DELETE. Usare le linee guida nelle sezioni seguenti di questo argomento per impostare le configurazioni necessarie per i parametri di WSASetService e la struttura WSAQUERYSET.

Configurazione di WSASetService

Quando un'applicazione chiama WSASetService, i parametri devono essere configurati in base alle specifiche seguenti:

  • essOperation deve avere un valore di RNRSERVICE_DELETE.
  • dwFlags deve essere zero (0).
  • lpqsRegInfo deve puntare a una struttura diWSAQUERYSET, che deve essere configurata usando le linee guida riportate nella sezione seguente di questo argomento.

Configurazione di WSAQUERYSET

La strutturaWSAQUERYSETdeve essere configurata in base alle specifiche seguenti:

  • dwSize deve specificare la dimensione della struttura WSAQUERYSET.
  • lpszServiceInstanceName deve puntare al nome peer che viene cancellato.
  • lpBlob deve puntare a una struttura PNRPINFO.
  • lpcsaBuffer deve puntare all'elenco degli indirizzi.

Nota

I membri rimanenti sono descritti in PNRP e WSASetService.

 

Esempio di annullamento della registrazione di un nome peer

Il frammento di codice seguente illustra come annullare la registrazione di un nome peer fornendo le informazioni corrette quando si chiama WSASetService usando la struttura di 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;
}