WSASetServiceW, fonction (winsock2.h)
La fonction WSASetService inscrit ou supprime du Registre une instance de service 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 cette 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 envoyer 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 mettre à jour les informations d’adresse. |
|
Supprimez le service du Registre. Pour SAP, cela signifie qu’il est impossible 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 est supprimée, et cela doit correspondre exactement à la structure de CSADDR_INFO correspondante spécifiée lors de l’inscription du service. |
[in] dwControlFlags
Valeur d’installation du service qui contrôle davantage l’opération effectuée par la fonction WSASetService. Les valeurs possibles pour ce paramètre sont définies dans le fichier d’en-tête Winsock2.h.
Valeur de retour
La valeur de retour de WSASetService est égale à 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 n’a pas suffisamment de privilèges pour installer le service. | |
Un ou plusieurs paramètres requis n’étaient pas valides ou manquants. | |
Le Ws2_32.dll n’a pas été initialisé. L’application doit d’abord appeler WSAStartup avant d’appeler des 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’espaces 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 combiner pour contrôler l’opération de la fonction WSASetService comme indiqué dans le tableau suivant.
Opération | Drapeaux | Le service existe déjà | Le service n’existe pas |
---|---|---|---|
RNRSERVICE_REGISTER | Aucun | Remplace l’objet. Utilise uniquement les adresses spécifiées. L’objet est INSCRIT. | Crée un objet. Utilise uniquement les adresses spécifiées. L’objet est INSCRIT. |
RNRSERVICE_REGISTER | SERVICE_MULTIPLE | Met à jour l’objet. Ajoute de nouvelles adresses au jeu existant. L’objet est INSCRIT. | Crée un objet. Utilise toutes les adresses spécifiées. L’objet est INSCRIT. |
RNRSERVICE_DEREGISTER | Aucun | 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 uniquement l’objet comme DEREGISTERED si aucune adresse n’est présente. Ne supprime pas l’objet de l’espace de noms. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DELETE | Aucun | 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 n’est conservée. | WSASERVICE_NOT_FOUND |
La publication de services dans des répertoires, tels que les services Active Directory, est limitée en fonction des listes de contrôle d’accès (ACL). Pour plus d’informations, consultez Problèmes de sécurité pour la publication de 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 exemple, 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 l’instance de service. |
lpServiceClassId | GUID correspondant à cette classe de service. |
lpVersion | (Facultatif) Fournit le numéro de version de l’instance de service. |
lpszComment | (Facultatif) Chaîne de commentaire facultative. |
dwNameSpace | Voir le tableau suivant. |
lpNSProviderId | Voir le tableau suivant. |
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 de CSADDR_INFO référencées par lpcsaBuffer. |
lpcsaBuffer | Pointeur vers un tableau de structures CSADDR_INFO qui contiennent la ou les adresses sur laquelle 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 dwNameSpace et lpNSProviderId membres déterminent 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é. |
Identificateur d’espace de nom valide | Zéro | Tous les fournisseurs d’espace de noms qui prennent en charge l’espace de noms indiqué. |
NS_ALL | Zéro | Tous les fournisseurs d’espace de noms. |
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.
Note
L’en-tête winsock2.h définit WSASetService comme 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. Le mélange 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.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 8.1, Windows Vista [applications de bureau | Applications UWP] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau | Applications UWP] |
plateforme cible | Windows |
d’en-tête | winsock2.h |
bibliothèque | Ws2_32.lib |
DLL | Ws2_32.dll |