Partager via


Désinscription d’un nom d’homologue

Lorsque vous désinscrivez un nom d’homologue, un nom inscrit est supprimé d’un cloud PNRP (Peer Name Resolution Protocol).

Désinscription d’un nom d’homologue

Pour annuler l’inscription d’un nom d’homologue, appelez WSASetService. Le paramètre essOperation doit avoir la valeur RNRSERVICE_DELETE. Utilisez les instructions des sections suivantes de cette rubrique pour effectuer les configurations requises sur les paramètres WSASetService et la structure WSAQUERYSET .

Configuration de WSASetService

Lorsqu’une application appelle WSASetService, les paramètres doivent être configurés selon les spécifications suivantes :

  • essOperation doit avoir une valeur de RNRSERVICE_DELETE.
  • dwFlags doit être égal à zéro (0).
  • lpqsRegInfo doit pointer vers une structure WSAQUERYSET , qui doit être configurée en suivant les instructions de la section suivante de cette rubrique.

Configuration de WSAQUERYSET

La structure WSAQUERYSET doit être configurée selon les spécifications suivantes :

  • dwSize doit spécifier la taille de la structure WSAQUERYSET .
  • lpszServiceInstanceName doit pointer vers le nom de l’homologue qui est en cours de désinscription.
  • lpBlob doit pointer vers une structure PNRPINFO .
  • lpcsaBuffer doit pointer vers la liste d’adresses.

Notes

Les autres membres sont décrits dans PNRP et WSASetService.

 

Exemple de désinscription d’un nom d’homologue

L’extrait de code suivant vous montre comment annuler l’inscription d’un nom d’homologue en fournissant les informations correctes lors de l’appel de WSASetService à l’aide de la structure 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;
}