Méthode change de la classe Win32_Service (Mbnapi.h) - TerminalService
La méthode declasse WMI Change modifie un Win32_TerminalService.
Cette rubrique utilise la syntaxe MOF (Managed Object Format). Pour plus d’informations sur l’utilisation de cette méthode, consultez Appel d’une méthode.
Syntaxe
uint32 Change(
[in] string DisplayName,
[in] string PathName,
[in] uint32 ServiceType,
[in] uint32 ErrorControl,
[in] string StartMode,
[in] boolean DesktopInteract,
[in] string StartName,
[in] string StartPassword,
[in] string LoadOrderGroup,
[in] string LoadOrderGroupDependencies,
[in] string ServiceDependencies
);
Paramètres
-
DisplayName [in]
-
Nom d’affichage du service. Cette chaîne a une longueur maximale de 256 caractères. Le nom est conservé à la casse dans le gestionnaire de contrôle de service. Les comparaisons DisplayName ne respectent toujours pas la casse.
Contraintes : accepte la même valeur que la propriété Name .
Exemple, « Atdisk ».
-
PathName [in]
-
Chemin d’accès complet au fichier exécutable qui implémente le service, par exemple, « \SystemRoot\System32\drivers\afd.sys ».
-
ServiceType [in]
-
Type de services fournis aux processus qui les appellent.
-
1 (0x1)
-
Pilote du noyau
-
2 (0x2)
-
Pilote du système de fichiers
-
4 (0x4)
-
Adaptateur
-
8 (0x8)
-
Pilote Recognizer
-
16 (0x10)
-
Propre processus
-
32 (0x20)
-
Processus de partage
-
256 (0x100)
-
Processus interactif
ErrorControl [in]
Gravité de l’erreur si ce service ne parvient pas à démarrer au démarrage. La valeur indique l’action effectuée par le programme de démarrage en cas d’échec. Toutes les erreurs sont enregistrées par le système.
0
Ignorer. Le démarrage se poursuit. Aucune notification n’est envoyée à l’utilisateur indiquant que le service a échoué.
1
Normal. Le démarrage se poursuit. Avant que l’utilisateur ne se connecte, l’utilisateur reçoit la notification « Au moins un service ou appareil a échoué au démarrage ».
2
Grave. L’ordinateur tente de redémarrer avec la dernière bonne configuration connue. Si le service échoue à nouveau, le démarrage continue et une notification est envoyée à l’utilisateur.
3
Critique. L’ordinateur tente de redémarrer avec la dernière bonne configuration connue. Si le service échoue à nouveau, le démarrage s’arrête.
StartMode [in]
Mode de démarrage du service de base Windows. Pour plus d'informations, consultez la section Notes.
Démarrage
Pilote de périphérique démarré par le chargeur du système d’exploitation.
Système
Pilote de périphérique démarré par le processus d’initialisation du système d’exploitation. Cette valeur est uniquement valide pour les services de pilote.
Automatique
Le service est démarré automatiquement par le gestionnaire de contrôle de service lors du démarrage du système. Les services de démarrage automatique démarrent avant qu’un utilisateur ne se connecte à l’ordinateur et s’exécutent même si aucun utilisateur ne se connecte à l’ordinateur.
Manuelle
Service à démarrer par le gestionnaire de contrôle de service lorsqu’un processus appelle la méthode StartService . Bien que les services manuels doivent être spécifiquement démarrés par un utilisateur (ou par un script), ils continuent à s’exécuter même si l’utilisateur se déconnecte. Les services manuels sont souvent appelés services à la demande.
Handicapés
Service qui ne peut plus être démarré. Pour démarrer un service désactivé, vous devez d’abord remplacer l’option de démarrage par Automatique ou Manuel.
DesktopInteract [in]
Si la valeur est True, le service peut créer ou communiquer avec une fenêtre sur le bureau.
StartName [in]
Nom du compte sous lequel le service s’exécute. Selon le type de service, le nom du compte peut se présenter sous la forme DomainName\Username ou .\Username. Le processus de service est journalisé à l’aide de l’un de ces deux formulaires lorsqu’il s’exécute. Si le compte appartient au domaine intégré, .\Username peut être spécifié. Si null est spécifié, le service est connecté en tant que compte LocalSystem. Pour les pilotes au niveau du noyau ou du système, StartName contient le nom de l’objet du pilote (c’est-à-dire, \FileSystem\Rdr ou \Driver\Xns) que le système d’entrée et de sortie (E/S) utilise pour charger le pilote de périphérique. Si null est spécifié, le pilote s’exécute avec un nom d’objet par défaut créé par le système d’E/S en fonction du nom du service, par exemple, « DWDOM\Administration ».
Vous pouvez également utiliser le format Nom d’utilisateur principal (UPN) pour spécifier le StartName, par exemple , Username@DomainName.
StartPassword [in]
Mot de passe pour le nom de compte spécifié par le paramètre StartName . Spécifiez NULL si vous ne modifiez pas le mot de passe. Spécifiez une chaîne vide si le service ne possède pas de mot de passe.
Notes
Lors de la modification d’un service d’un système local en réseau ou d’un réseau vers un système local, StartPassword doit être une chaîne vide (« ») et non null.
LoadOrderGroup [in]
Nom du groupe auquel il est associé. Les groupes d’ordres de chargement sont contenus dans le registre système et déterminent la séquence dans laquelle les services sont chargés dans le système d’exploitation. Si le pointeur a la valeur NULL ou s’il pointe vers une chaîne vide, le service n’appartient pas à un groupe. Pour plus d'informations, consultez la section Notes.
Les dépendances entre les groupes doivent être répertoriées dans le paramètre LoadOrderGroupDependencies . Les services de la liste des groupes d’ordre de chargement sont démarrés en premier, suivis des services dans les groupes qui ne figurent pas dans la liste des groupes d’ordre de chargement, suivis des services qui n’appartiennent pas à un groupe. Le registre système contient une liste de groupes d’ordre de charge situés à l’adresse suivante :
HKEY_LOCAL_MACHINE\Système\Currentcontrolset\Contrôle\ServiceGroupOrder
LoadOrderGroupDependencies [in]
Liste des groupes d’ordre de charge qui doivent démarrer avant le démarrage de ce service. Le tableau est doublement terminé par null. Si le pointeur a la valeur NULL ou s’il pointe vers une chaîne vide, le service n’a aucune dépendance. Les noms de groupe doivent être préfixés par le caractère SC_GROUP_IDENTIFIER (défini dans le fichier Winsvc.h) pour les différencier des noms de service, car les services et les groupes de services partagent le même espace de noms. La dépendance à un groupe signifie que ce service peut s’exécuter si au moins un membre du groupe est en cours d’exécution après une tentative de démarrage de tous les membres du groupe.
ServiceDependencies [in]
Liste qui contient les noms des services qui doivent démarrer avant le démarrage de ce service. Le tableau est doublement terminé par null. Si le pointeur a la valeur NULL ou s’il pointe vers une chaîne vide, le service n’a aucune dépendance. La dépendance vis-à-vis d’un service indique que ce service peut s’exécuter uniquement si le service dont il dépend est en cours d’exécution.
Valeur retournée
Retourne l’une des valeurs répertoriées dans la liste suivante, ou toute autre valeur pour indiquer une erreur. Pour obtenir des codes d’erreur supplémentaires, consultez Constantes d’erreur WMI ou WbemErrorEnum. Pour connaître les valeurs HRESULT générales, consultez Codes d’erreur système.
-
0
-
La demande a été acceptée.
-
1
-
La demande n'est pas prise en charge.
-
2
-
L’utilisateur n’avait pas l’accès nécessaire.
-
3
-
Le service ne peut pas être arrêté car d'autres services en cours d'exécution en dépendent.
-
4
-
Le code de contrôle demandé n'est pas valide ou est inacceptable pour le service.
-
5
-
Le code de contrôle demandé ne peut pas être envoyé au service, car l’état du service (Win32_BaseService. State property) est égal à 0, 1 ou 2.
-
6
-
Le service n'a pas été démarré.
-
7
-
Le service n'a pas répondu à la demande de démarrage en temps voulu.
-
8
-
Échec inconnu au démarrage du service.
-
9
-
Le chemin d’accès au répertoire du fichier exécutable de service est introuvable.
-
10
-
Le service est déjà en cours d'exécution.
-
11
-
La base de données pour ajouter un nouveau service est verrouillée.
-
12
-
Une dépendance sur laquelle ce service s’appuie a été supprimée du système.
-
13
-
Le service n'a pas pu trouver le service nécessaire à partir d'un service dépendant.
-
14
-
Le service a été désactivé du système.
-
15
-
Le service ne dispose pas de l'authentification correcte pour être exécuté sur le système.
-
16
-
Ce service est supprimé du système.
-
17
-
Le service n’a pas de thread d’exécution.
-
18
-
Le service a des dépendances circulaires au démarrage.
-
19
-
Un service s’exécute sous le même nom.
-
20
-
Le nom du service comporte des caractères non valides.
-
21
-
Des paramètres non valides ont été passés au service.
-
22
-
Le compte sous lequel ce service s’exécute n’est pas valide ou n’a pas les autorisations nécessaires pour exécuter le service.
-
23
-
Le service existe dans la base de données des services disponibles dans le système.
-
24
-
Le service est actuellement mis en pause dans le système.
Notes
Lorsqu’un ordinateur démarre, tous les services de démarrage automatique démarrent également. À l’occasion, l’un de ces services peut ne pas démarrer avec l’ordinateur. Lorsqu’un service échoue au démarrage du système, l’ordinateur effectue une action basée sur la valeur du code de contrôle d’erreur de service.
la plupart des services sont installés à l’aide du code de contrôle d’erreur Normal. Voici quelques-unes des exceptions installées à l’aide du code d’erreur Ignorer :
- Service de réplication de fichiers
- Carte à puce
- Ouverture de session secondaire
- WMI
Pour les services installés à l’aide du code d’erreur Ignorer, aucune notification n’est envoyée à l’utilisateur indiquant que le service a échoué. Si vous préférez une notification à l’écran indiquant qu’un service n’a pas pu démarrer, vous pouvez utiliser WMI pour modifier le code de contrôle d’erreur. Les codes de contrôle d’erreur s’appliquent uniquement au démarrage de l’ordinateur ; les codes de contrôle d’erreur ne sont pas utilisés si vous arrêtez, puis tentez de redémarrer un service après l’exécution de l’ordinateur.
À l’occasion, vous devrez peut-être modifier le compte sous lequel un service donné s’exécute. Par exemple, vous pouvez exécuter un service sous un compte d’administration. Étant donné que cela peut créer une vulnérabilité de sécurité, vous pouvez basculer le service vers un compte avec moins de privilèges. Vous pouvez également avoir des services en cours d’exécution sous un compte qui est sur le point d’être supprimé, ou vous pouvez vous assurer que, sur tous vos serveurs, certains services s’exécutent sous certains comptes. Vous pouvez utiliser la méthode Change de la classe Win32_TerminalService pour configurer l’exécution des services sous un compte d’utilisateur spécifié. Lorsque vous sélectionnez un compte, gardez à l’esprit les points suivants :
Le compte utilisé en tant que compte de service doit avoir le droit de se connecter en tant que service. Ce droit peut être accordé à l’aide de stratégie de groupe.
Le compte utilisé en tant que compte de service ne doit pas être membre d’un groupe d’administrateurs local, de domaine ou d’entreprise.
Chaque instance d’un service doit s’exécuter sous un compte d’utilisateur unique. Cela offre une sécurité supplémentaire et permet l’audit des instances de service individuelles.
Si le service est interactif, le service doit s’exécuter sous le compte LocalSystem.
LocalSystem est requis, car une seule station fenêtre (WinSta0) peut être visible et interactive à la fois. Si un service s’exécute sous un compte autre que LocalSystem, il s’exécute dans la station de fenêtre Service-0x03e7$\Default, qui est une fenêtre invisible. Les services en cours d’exécution dans cette station de fenêtre ne peuvent pas recevoir d’entrée ou d’affichage de sortie.
Lorsque vous attribuez un compte à un service, le SCM requiert le mot de passe correct pour ce compte avant d’effectuer l’affectation. Si vous fournissez un mot de passe incorrect, le SCM rejette le compte. Si vous configurez un compte de service à l’aide du compte LocalSystem, LocalService ou NetworkService, vous n’avez pas besoin de fournir un mot de passe de compte, car ces comptes n’ont pas de mot de passe.
Le SCM stocke le mot de passe du compte dans la base de données des services. Toutefois, une fois le mot de passe attribué, le SCM ne garantit pas que le mot de passe stocké dans la base de données des services et le mot de passe attribué au compte d’utilisateur dans Active Directory continuent de correspondre. Par conséquent, une situation semblable à ce qui suit peut se produire :
- . Vous configurez un service pour qu’il s’exécute sous un compte d’utilisateur particulier.
- Le service démarre sous ce compte à l’aide du mot de passe du compte actuel.
- Vous modifiez le mot de passe du compte d’utilisateur.
- Le service continue de s’exécuter. Toutefois, si le service s’arrête, vous ne pouvez pas le redémarrer, car le SCM continue d’utiliser l’ancien mot de passe non valide. La modification du mot de passe dans Active Directory ne modifie pas le mot de passe stocké dans la base de données des services.
Si vous exécutez des services sous des comptes d’utilisateur standard, vous devez mettre à jour ces mots de passe de service chaque fois que le mot de passe du compte d’utilisateur change. Cela peut prendre du temps si vous ne savez pas quels services s’exécutent sous ce compte ou quels ordinateurs ont des services exécutés sous ce compte. Heureusement, vous pouvez utiliser WMI pour case activée les comptes de service sur tous vos ordinateurs et, si nécessaire, modifier le mot de passe du compte de service.
Le paramètre Win32_LoadOrderGroup représente un groupe de services système qui définissent des dépendances d’exécution. Les services doivent être lancés dans l’ordre spécifié par le groupe d’ordre de chargement, car les services dépendent les uns des autres. Ces services dépendants nécessitent la présence des services antécédents pour fonctionner correctement.
Pour remplacer un service d’un service réseau par un système local, les paramètres StartName et StartPassword doivent avoir les valeurs suivantes :
StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL
Pour remplacer un service d’un service système local par un réseau, les paramètres StartName et StartPassword doivent avoir les valeurs suivantes :
StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL
Exemples
Le code VBScript suivant modifie le compte de service pour les services qui s’exécutent sous un compte d’utilisateur spécifié en LocalSystem.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
errServiceChange = objService.Change _
( , , , , , , ".\LocalSystem" , "")
Next
Le code VBScript suivant modifie le mot de passe du compte de service pour tous les scripts exécutés sous Netsvc
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
errReturn = objService.Change( , , , , , , , "password")
Next
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows Vista |
Serveur minimal pris en charge |
Windows Server 2008 |
Espace de noms |
Root\CIMv2\TerminalServices |
En-tête |
|
MOF |
|
DLL |
|