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;
}