WSASetServiceW, fonction (winsock2.h)
La fonction WSASetService inscrit ou supprime du Registre un service instance dans un ou plusieurs espaces de noms.
Syntaxe
INT WSAAPI WSASetServiceW(
[in] LPWSAQUERYSETW lpqsRegInfo,
[in] WSAESETSERVICEOP essoperation,
[in] DWORD dwControlFlags
);
Paramètres
[in] lpqsRegInfo
Pointeur vers les informations de service pour l’inscription ou la désinscription.
[in] essoperation
Valeur qui détermine l’opération demandée. 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 |
---|---|
|
Inscrivez le service. Pour SAP, cela signifie l’envoi d’une diffusion périodique. Il s’agit d’un NOP pour l’espace de noms DNS. Pour les magasins de données persistants, cela signifie la mise à jour des informations d’adresse. |
|
Supprimez le service du Registre. Pour SAP, cela signifie arrêter d’envoyer la diffusion périodique. 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. |
|
Supprimez le service du nom dynamique et des espaces persistants. Pour les services représentés par plusieurs structures CSADDR_INFO (à l’aide de l’indicateur SERVICE_MULTIPLE), seule l’adresse spécifiée sera supprimée, et cela doit correspondre exactement à la structure de CSADDR_INFO correspondante qui a été spécifiée lors de l’inscription du service. |
[in] dwControlFlags
Valeur des indicateurs d’installation du service qui contrôle davantage l’opération effectuée de la fonction WSASetService . Les valeurs possibles pour ce paramètre sont définies dans le fichier d’en-tête Winsock2.h .
Valeur retournée
La valeur de retour pour WSASetService est zéro si l’opération a réussi. Sinon, la valeur SOCKET_ERROR est retournée et un numéro d’erreur spécifique peut être récupéré en appelant WSAGetLastError.
Code d'erreur | Signification |
---|---|
La routine appelante ne dispose pas des privilèges suffisants pour installer le service. | |
Un ou plusieurs paramètres requis n’étaient pas valides ou manquants. | |
Le Ws2_32.dlln’a pas été initialisé. L’application doit d’abord appeler WSAStartup avant d’appeler les fonctions windows Sockets. | |
La mémoire était insuffisante pour effectuer l’opération. |
Remarques
La fonction WSASetService peut être utilisée pour affecter un fournisseur d’espace de noms spécifique, tous les fournisseurs associés à un espace de noms spécifique ou tous les fournisseurs de tous les espaces de noms.
Les valeurs disponibles pour essOperation et dwControlFlags se combinent pour contrôler l’opération de la fonction WSASetService , comme indiqué dans le tableau suivant.
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 REGISTERED. | Crée un objet. Utilise uniquement les adresses spécifiées. L’objet est ENREGISTRÉ. |
RNRSERVICE_REGISTER | SERVICE_MULTIPLE | Met à jour l'objet. Ajoute de nouvelles adresses à l’ensemble existant. L’objet est REGISTERED. | 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 supprimé du Registre. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DEREGISTER | SERVICE_MULTIPLE | Met à jour l'objet. Supprime uniquement les adresses spécifiées. Marque l’objet comme DEREGISTERED uniquement si aucune adresse n’est présente. Ne supprime pas l’objet 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 |
La publication de services dans des répertoires, tels que les services Active Directory, est restreinte en fonction des listes de contrôle d’accès (ACL). Pour plus d’informations, consultez Problèmes de sécurité pour la publication du service.
Lorsque le paramètre dwControlFlags est défini sur SERVICE_MULTIPLE, une application peut gérer ses adresses indépendamment. Cela est utile lorsque l’application souhaite gérer ses protocoles individuellement ou lorsque le service réside sur plusieurs ordinateurs. Par instance, lorsqu’un service utilise plusieurs protocoles, il peut constater qu’un socket d’écoute abandonne, mais que les autres sockets restent opérationnels. Dans ce cas, le service peut supprimer l’adresse abandonnée du Registre sans affecter les autres adresses.
Lorsque le paramètre dwControlFlags est défini sur SERVICE_MULTIPLE, une application ne doit pas laisser les adresses obsolètes rester dans l’objet. Cela peut se produire si l’application abandonne sans émettre de demande DEREGISTER. Lorsqu’un service s’inscrit, il doit stocker ses adresses. Lors de son appel suivant, le service doit supprimer explicitement ces anciennes adresses obsolètes du registre avant d’inscrire de nouvelles adresses.
Propriétés du service
Le tableau suivant décrit comment les données de propriété de service sont représentées dans une structure WSAQUERYSET . Les champs étiquetés comme (Facultatif) peuvent contenir un pointeur null.Membre WSAQUERYSET | Description de la propriété de service |
---|---|
dwSize | Doit être défini sur sizeof (WSAQUERYSET). Il s’agit d’un mécanisme de contrôle de version. |
dwOutputFlags | Non applicable et ignoré. |
lpszServiceInstanceName | La chaîne référencée contient le nom de instance du service. |
lpServiceClassId | GUID correspondant à cette classe de service. |
lpVersion | (Facultatif) Fournit le numéro de version instance du service. |
lpszComment | (Facultatif) Chaîne de commentaire facultative. |
dwNameSpace | Consultez le tableau qui suit. |
lpNSProviderId | Consultez le tableau qui suit. |
lpszContext | (Facultatif) Spécifie le point de départ de la requête dans un espace de noms hiérarchique. |
dwNumberOfProtocols | Ignoré. |
lpafpProtocols | Ignoré. |
lpszQueryString | Ignoré. |
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 la ou les adresses que le service écoute. |
lpBlob | (Facultatif) Il s’agit d’un pointeur vers une entité spécifique au fournisseur. |
Comme illustré ci-dessous, la combinaison des membres dwNameSpace et lpNSProviderId détermine que les fournisseurs d’espaces de noms sont affectés par cette fonction.
dwNameSpace | lpNSProviderId | Étendue de l’impact |
---|---|---|
Ignoré | Non null | Fournisseur d’espace de noms spécifié. |
Un nom-identificateur d’espace valide | Null | Tous les fournisseurs d’espace de noms qui prennent en charge l’espace de noms indiqué. |
NS_ALL | Null | Tous les fournisseurs d’espace de nom. |
Windows Phone 8 : la fonction WSASetServiceW est prise en charge pour les applications Windows Phone Store sur Windows Phone 8 et versions ultérieures.
Windows 8.1 et Windows Server 2012 R2 : la fonction WSASetServiceW est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.
Notes
L’en-tête winsock2.h définit WSASetService en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8.1, Windows Vista [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | winsock2.h |
Bibliothèque | Ws2_32.lib |
DLL | Ws2_32.dll |