Anulación del registro de un nombre del mismo nivel

Al anular el registro de un nombre del mismo nivel, se quita un nombre registrado de una nube del Protocolo de resolución de nombres del mismo nivel (PNRP).

Anulación del registro de un nombre del mismo nivel

Para anular el registro de un nombre del mismo nivel, llame a WSASetService. El parámetro essOperation debe tener un valor de RNRSERVICE_DELETE. Use las instrucciones de las secciones siguientes de este tema para realizar las configuraciones necesarias para los parámetros WSASetService y la estructura WSAQUERYSET .

Configuración de WSASetService

Cuando una aplicación llama a WSASetService, los parámetros deben configurarse según las siguientes especificaciones:

  • essOperation debe tener un valor de RNRSERVICE_DELETE.
  • dwFlags debe ser cero (0).
  • lpqsRegInfo debe apuntar a una estructura WSAQUERYSET , que debe configurarse mediante las instrucciones de la sección siguiente de este tema.

Configuración de WSAQUERYSET

La estructura WSAQUERYSET debe configurarse según las siguientes especificaciones:

  • dwSize debe especificar el tamaño de la estructura WSAQUERYSET .
  • lpszServiceInstanceName debe apuntar al nombre del mismo nivel que se está anulando el registro.
  • lpBlob debe apuntar a una estructura PNRPINFO .
  • lpcsaBuffer debe apuntar a la lista de direcciones.

Nota

Los miembros restantes se describen en PNRP y WSASetService.

 

Un ejemplo de anulación del registro de un nombre del mismo nivel

El siguiente fragmento de código muestra cómo anular el registro de un nombre del mismo nivel proporcionando la información correcta al llamar a WSASetService mediante la estructura 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;
}