Partager via


Méthode de modification de la classe Win32_Service (Mbnapi.h)

La méthode declasse Change WMI modifie un Win32_Service.

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é par 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 complet du 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 de noyau

2 (0x2)

Pilote de système de fichiers

4 (0x4)

Adaptateur

8 (0x8)

Pilote recognizer

16 (0x10)

Processus propre

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.

Ignorer (0)

L'utilisateur n'est pas notifié.

Normal (1)

Normal. L'utilisateur est notifié.

Grave (2)

Le système est redémarré avec la dernière bonne configuration.

Critique (3)

Le système tente de redémarrer avec une bonne configuration.

StartMode [in]

Mode démarrer 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. Cette valeur est uniquement valide pour les services de pilote.

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 doit être démarré automatiquement par le Gestionnaire de contrôle de service lors du démarrage du système.

Manuel

Service à démarrer par le Gestionnaire de contrôle de service lorsqu’un processus appelle la méthode StartService .

Désactivé

Service qui ne peut plus être démarré.

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 être 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 la valeur NULL est spécifiée, 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 du 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 de commandes 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 chargement 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 groupes 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 s’exécute 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 à un service indique que ce service ne peut s’exécuter que 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.

Success

0

La demande a été acceptée.

Non pris en charge

1

La demande n'est pas prise en charge.

Accès refusé

2

L’utilisateur n’avait pas l’accès nécessaire.

Services dépendants en cours d’exécution

3

Le service ne peut pas être arrêté car d'autres services en cours d'exécution en dépendent.

Contrôle de service non valide

4

Le code de contrôle demandé n'est pas valide ou est inacceptable pour le service.

Le service ne peut pas accepter le contrôle

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.

Service non actif

6

Le service n'a pas été démarré.

Délai d’expiration de la demande de service

7

Le service n'a pas répondu à la demande de démarrage en temps voulu.

Échec inconnu

8

Échec inconnu lors du démarrage du service.

Chemin introuvable

9

Le chemin du répertoire du fichier exécutable de service est introuvable.

Service déjà en cours d’exécution

10

Le service est déjà en cours d'exécution.

Base de données de service verrouillée

11

La base de données pour ajouter un nouveau service est verrouillée.

Dépendance de service supprimée

12

Une dépendance sur laquelle ce service s’appuie a été supprimée du système.

Échec de dépendance de service

13

Le service n'a pas pu trouver le service nécessaire à partir d'un service dépendant.

Service désactivé

14

Le service a été désactivé du système.

Échec de l’ouverture de session au service

15

Le service ne dispose pas de l'authentification correcte pour être exécuté sur le système.

Service marqué pour suppression

16

Ce service est supprimé du système.

Service sans thread

17

Le service n’a pas de thread d’exécution.

Dépendance circulaire d’état

18

Le service a des dépendances circulaires lorsqu’il démarre.

Nom dupliqué d’état

19

Un service s’exécute sous le même nom.

Nom non valide d’état

20

Le nom du service comporte des caractères non valides.

Paramètre non valide d’état

21

Des paramètres non valides ont été passés au service.

État Compte de service non valide

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.

Service d’état existant

23

Le service existe dans la base de données des services disponibles dans le système.

Service déjà suspendu

24

Le service est actuellement mis en pause dans le système.

Autres

25 4294967295

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 en fonction de la valeur du code de contrôle d’erreur du 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 exécutés sous un compte qui est sur le point d’être supprimé, ou vous pouvez souhaiter 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_Service pour configurer les services pour qu’ils s’exécutent sous un compte d’utilisateur spécifié. Lorsque vous sélectionnez un compte, gardez à l’esprit les éléments suivants :

  • Le compte utilisé comme 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é comme compte de service ne doit pas être membre d’un groupe Administrateurs local, de domaine ou d’entreprise.

  • Chaque instance d’un service doit s’exécuter sous un compte d’utilisateur unique. Cela fournit 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 de 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 s’exécutant dans cette station de fenêtre ne peuvent pas recevoir d’entrée ou de sortie d’affichage.

Lorsque vous affectez un compte à un service, le SCM nécessite le mot de passe approprié 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 mots 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
Racine\CIMV2
En-tête
Mbnapi.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Voir aussi

Classes du système d’exploitation

Win32_Service

Tâches WMI : Services