Annulation de l’inscription d’un nom d’homologue

Lorsque vous annulez l’inscription d’un nom d’homologue, un nom inscrit est supprimé d’un Cloud PNRP (Peer Name Resolution Protocol).

Annulation de l’inscription 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 pour les paramètres WSASetService et la structure WSAQUERYSET .

Configuration de WSASetService

Quand une application appelle WSASetService, les paramètres doivent être configurés conformément aux spécifications suivantes :

  • essOperation doit avoir la valeur RNRSERVICE _ Delete.
  • dwFlags doit avoir la valeur zéro (0).
  • lpqsRegInfo doit pointer vers une structure WSAQUERYSET , qui doit être configurée à l’aide des instructions de la section suivante de cette rubrique.

Configuration de WSAQUERYSET

La structure WSAQUERYSET doit être configurée conformément aux spécifications suivantes :

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

Notes

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

Exemple d’annulation de l’inscription 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;
}