Partager via


Fonction de rappel LPNSPSETSERVICE (ws2spi.h)

La fonction NSPSetService inscrit ou désinscrit un service instance dans un espace de noms.

Syntaxe

LPNSPSETSERVICE Lpnspsetservice;

INT Lpnspsetservice(
  [in] LPGUID lpProviderId,
  [in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in] LPWSAQUERYSETW lpqsRegInfo,
  [in] WSAESETSERVICEOP essOperation,
  [in] DWORD dwControlFlags
)
{...}

Paramètres

[in] lpProviderId

Pointeur vers le GUID du fournisseur d’espace de noms spécifique dans lequel le service est inscrit.

[in] lpServiceClassInfo

Informations de schéma de classe de service.

[in] lpqsRegInfo

Informations de propriété à mettre à jour lors de l’inscription.

[in] essOperation

Type d’opération demandé.

Ce paramètre peut être l’une des valeurs du type d’énumération WSAESETSERVICEOP défini dans le fichier d’en-tête Winsock2.h .

Valeur Signification
RNRSERVICE_REGISTER
0
Inscrivez le service. Pour l’espace de noms SAP (Service Advertising Protocol) utilisé dans un environnement NetWare, cela signifie l’envoi d’une diffusion périodique. Il s’agit d’un NOP pour l’espace de noms DNS (Domain Name System). Pour les magasins de données persistants, cela signifie mettre à jour les informations d’adresse.
RNRSERVICE_DEREGISTER
1
Désinscrire le service. Pour l’espace de noms SAP, cela signifie arrêter l’envoi périodique de la diffusion. Il s’agit d’un NOP pour l’espace de noms DNS. Pour les magasins de données persistants, cela signifie la suppression des informations d’adresse.
RNRSERVICE_DELETE
2
Supprimez le service du nom dynamique et des espaces persistants. Pour les services représentés par plusieurs structures de CSADDR_INFO (à l’aide de l’indicateur SERVICE_MULTIPLE), seule l’adresse fournie est supprimée, ce qui doit correspondre exactement à la structure **CSADDR_INFO** correspondante fournie lors de l’inscription du service.

[in] dwControlFlags

Ensemble d’indicateurs qui contrôle l’opération de service demandée.

Les valeurs possibles pour ce paramètre sont définies dans le fichier d’en-tête Winsock2.h .

Valeur Signification
SERVICE_MULTIPLE
0x00000001
Contrôler l’étendue de l’opération.

Lorsque cette valeur est définie, l’action n’est effectuée que sur le jeu d’adresses donné. Une opération d’inscription n’invalide pas les adresses existantes et une opération de désinscription invalide uniquement l’ensemble d’adresses donné.

Lorsque cette valeur est absente, les adresses de service sont gérées en tant que groupe. Une inscription ou une désinscription invalide toutes les adresses existantes avant d’ajouter le jeu d’adresses donné.

Valeur retournée

La fonction doit retourner NO_ERROR (zéro) si la routine réussit. Il doit retourner SOCKET_ERROR (–1) si la routine échoue et il doit définir le code d’erreur approprié à l’aide de WSASetLastError.

Code d'erreur Signification
WSAEACCES
La routine appelante ne dispose pas des privilèges suffisants pour installer le service.
WSA_NOT_ENOUGH_MEMORY
La mémoire disponible est insuffisante pour effectuer cette opération.
WSAEINVAL
Un ou plusieurs paramètres n’étaient pas valides ou manquants pour ce fournisseur.
WSAEOPNOTSUPP
L'opération n'est pas prise en charge. Cette erreur est retournée si le fournisseur d’espaces de noms n’implémente pas cette fonction.
WSASERVICE_NOT_FOUND
Le service est inconnu. Le service est introuvable dans l’espace de noms spécifié.

Remarques

Le tableau suivant répertorie les valeurs disponibles pour essOperation et dwControlFlags.

Opération Indicateurs Le service existe déjà Le service n’existe pas
**RNRSERVICE_REGISTER** None Remplace l’objet. Utilise uniquement les adresses spécifiées. L’objet est ENREGISTRÉ. Crée un objet. Utilise uniquement les adresses spécifiées. L’objet est ENREGISTRÉ.
**RNRSERVICE_REGISTER** **SERVICE_MULTIPLE** Mises à jour objet. Ajoute de nouvelles adresses à l’ensemble existant. L’objet est ENREGISTRÉ. Crée un objet. Utilise toutes les adresses spécifiées. L’objet est ENREGISTRÉ.
**RNRSERVICE_DEREGISTER** None Supprime toutes les adresses, mais ne supprime pas l’objet de l’espace de noms. L’objet est DEREGISTERED. WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** Mises à jour objet. Supprime uniquement les adresses spécifiées. Marquez uniquement l’objet comme DEREGISTERED si aucune adresse n’est présente. Ne supprime pas de l’espace de noms. WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** None Supprime l’objet de l’espace de noms. WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** **SERVICE_MULTIPLE** Supprime uniquement les adresses spécifiées. Supprime uniquement l’objet de l’espace de noms si aucune adresse ne reste. WSASERVICE_NOT_FOUND
 

Lorsque le paramètre dwControlFlags est défini sur SERVICE_MULTIPLE, cela permet à une application de gérer ses adresses indépendamment. Cela est utile lorsque l’application doit gérer ses protocoles individuellement ou lorsque le service réside sur plusieurs ordinateurs. Par exemple, lorsqu’un service utilise plusieurs protocoles, un socket d’écoute peut abandonner, mais les autres sockets restent opérationnels. Dans cet exemple, le service peut annuler l’inscription de l’adresse abandonnée sans affecter les autres adresses.

Lors de l’utilisation de SERVICE_MULTIPLE, une application ne doit pas laisser les anciennes adresses rester dans l’objet. Cela peut se produire si l’application abandonne sans émettre de demande de RNRSERVICE_DEREGISTER . Lorsqu’un service s’inscrit, il doit stocker ses adresses. Lors de son appel suivant, le service doit explicitement annuler l’inscription de ces anciennes adresses avant d’inscrire de nouvelles adresses.

Propriétés du service

Le tableau suivant répertorie les noms des membres WSAQUERYSET et décrit la façon dont les données de propriété de service sont représentées. Les membres étiquetés comme (Facultatif) peuvent être fournis avec un pointeur null.
Nom du membre WSAQUERYSET Description de la propriété de service
**dwSize** Définissez sur sizeof(WSAQUERYSET). Il s’agit d’un mécanisme de contrôle de version.
**lpszServiceInstanceName** La chaîne référencée contient le nom du service instance.
**lpServiceClassId** GUID qui correspond à cette classe de service.
**lpVersion** facultatif. Fournit le numéro de version du service instance.
**lpszComment** facultatif. Chaîne de commentaire facultative.
**dwNameSpace** Ignoré pour cette opération.
**lpNSProviderId** Ignoré pour cette opération. L’identificateur du fournisseur est contenu dans le paramètre lpProviderId .
**lpszContext** facultatif. Point de départ de la requête dans un espace de noms hiérarchique.
**dwNumberOfProtocols** Ignoré pour cette opération.
**lpafpProtocols** Ignoré pour cette opération.
**pszQueryString** Ignoré pour cette opération.
**dwNumberOfCsAddrs** Nombre d’éléments dans le tableau de structures CSADDR_INFO référencées par lpcsaBuffer.
**lpcsaBuffer** Pointeur vers un tableau de structures CSADDR_INFO qui contiennent l’adresse ou les adresses que le service écoute.
**dwOutputFlags** Ignoré pour cette opération.
**lpBlob** facultatif. Pointeur vers une entité spécifique au fournisseur.
 
**Remarque** Il est acceptable que le membre **iProtocol** de la structure CSADDR_INFO contienne la constante manifeste **IPROTOCOL_ANY**, indiquant une valeur générique. Le fournisseur d’espaces de noms doit remplacer une valeur acceptable pour la famille d’adresses et le type de socket donnés.
 

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête ws2spi.h

Voir aussi

CSADDR_INFO

WSAQUERYSET

WSASetLastError