Directive INF AddService

Notes

Cette directive n’est pas utilisée dans les fichiers INF qui installent des appareils qui ne nécessitent pas de pilotes, tels que des modems ou des moniteurs d’affichage.

Une directive AddService est utilisée dans un DDInstall INF. Section Services ou section INF DefaultInstall.Services. Il spécifie les caractéristiques des services associés aux pilotes, telles que le mode de chargement et le moment où les services sont chargés, ainsi que les dépendances sur d’autres pilotes ou services hérités sous-jacents. Si vous le souhaitez, cette directive configure également les services de journalisation des événements pour l’appareil.

[DDInstall.Services] 
 
AddService=ServiceName,[flags],service-install-section
                     [,event-log-install-section[,[EventLogType][,EventName]]]
...

Entrées

ServiceName
Spécifie le nom du service à installer. Le nom doit être suffisamment unique pour qu’il soit peu probable qu’il entre en conflit avec un service installé par un autre fichier INF. Par exemple, le nom du service peut inclure une brève abréviation du nom de votre entreprise comme préfixe ou suffixe. Ce nom ne doit pas être localisé. Elle doit être identique quelle que soit la langue locale du système.

flags
Spécifie un ou plusieurs (ORed) des indicateurs définis par le système suivants, définis dans Setupapi.h, exprimés sous forme de valeur hexadécimale :

0x00000001 (SPSVCINST_TAGTOFRONT)
Déplacez l’étiquette du service nommé vers l’avant de sa liste de commandes de groupe, ce qui garantit qu’elle est chargée en premier au sein de ce groupe (sauf si un appareil installé ultérieurement avec cette spécification INF le déplace). Les fichiers INF qui installent exclusivement des appareils PnP et des appareils avec des pilotes WDM ne doivent pas définir cet indicateur.

0x00000002 (SPSVCINST_ASSOCSERVICE)
Affectez le service nommé comme pilote de fonction PnP (ou pilote hérité) pour l’appareil installé par ce fichier INF.

Pour indiquer qu’un service est le pilote de fonction d’un appareil, le service doit spécifier l’indicateur SPSVCINST_ASSOCSERVICE dans la directive AddService . Pour un service tel qu’un pilote de filtre ou un autre composant de pilote, l’indicateur ne doit pas être utilisé.

Chaque inf de pilote de périphérique doit avoir exactement un service associé. L’inf n’a pas besoin d’un service associé s’il s’agit d’un INF d’extension ou utilise les directives Include/Needs pour hériter du service associé d’un autre INF. Pour les appareils qui ne nécessitent pas de pilote de fonction, le pilote NULL peut être spécifié en tant que service associé comme suit :

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
Ne remplacez pas le nom convivial (facultatif) du service donné si ce service existe déjà dans le système.

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
Ne remplacez pas le type de démarrage du service donné si ce service nommé existe déjà dans le système.

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
Ne remplacez pas la valeur de contrôle d’erreur du service donné si ce service nommé existe déjà dans le système.

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
Ne remplacez pas la valeur de groupe de chargement du service donné si ce service nommé existe déjà dans le système. Les fichiers INF qui installent exclusivement des appareils PnP et des appareils avec des pilotes WDM ne doivent pas définir cet indicateur.

0x00000080 (SPSVCINST_NOCLOBBER_DEPENDENCIES)
Ne remplacez pas la liste des dépendances du service donné si ce service nommé existe déjà dans le système. Les fichiers INF qui installent exclusivement des appareils PnP et des appareils avec des pilotes WDM ne doivent pas définir cet indicateur.

0x00000100 (SPSVCINST_NOCLOBBER_DESCRIPTION)
Ne remplacez pas la description (facultative) du service donné si ce service existe déjà dans le système.

0x00000400 (SPSVCINST_CLOBBER_SECURITY) (Windows XP et versions ultérieures de Windows)
Remplacez les paramètres de sécurité du service si ce service existe déjà dans le système.

0x00000800 (SPSVCSINST_STARTSERVICE) (Windows Vista et versions ultérieures de Windows)
Démarrez le service après l’installation du service. Cet indicateur ne peut pas être utilisé pour démarrer un service qui implémente un pilote de fonction Plug-and-Play (PnP) ou un pilote de filtre pour un appareil. Sinon, cet indicateur peut être utilisé pour démarrer un service en mode utilisateur ou en mode noyau géré par le Gestionnaire de contrôle de service (SCM).

0x00001000 (SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES) (Windows 7 et versions ultérieures de Windows)
Ne remplacez pas les privilèges du service donné si ce service existe déjà dans le système.

0x00002000 (SPSVCINST_NOCLOBBER_TRIGGERS) (Windows 10 version 2004 et versions ultérieures de Windows)
Ne remplacez pas les déclencheurs pour le service donné si ce service existe déjà dans le système et possède des déclencheurs existants. Pour plus d’informations sur les déclencheurs, consultez la directive AddTrigger ci-dessous.

0x00004000 (SPSVCINST_NOCLOBBER_SERVICESIDTYPE) (Windows 10 version 2004 et versions ultérieures de Windows)
Ne remplacez pas les informations SID pour le service donné si ce service existe déjà dans le système et contient des informations SID existantes. Pour plus d’informations, consultez la directive ServiceSidType ci-dessous.

0x00008000 (SPSVCINST_NOCLOBBER_DELAYEDAUTOSTART) (Windows 10 version 2004 et versions ultérieures de Windows)
Ne remplacez pas la valeur de démarrage automatique différé pour le service donné si ce service existe déjà dans le système et a une valeur existante. Pour plus d’informations, consultez la directive DelayedAutoStart ci-dessous.

0x00020000 (SPSVCINST_NOCLOBBER_FAILUREACTIONS) (Windows 11 version 22H2 et versions ultérieures de Windows)
Ne remplacez pas les actions d’échec pour le service donné si ce service existe déjà dans le système et comporte des actions d’échec existantes. Pour plus d’informations sur les actions d’échec, consultez la directive FailureActions ci-dessous.

0x00040000 (SPSVCINST_NOCLOBBER_BOOTFLAGS) (Windows 11 build 25381 et versions ultérieures de Windows) Ne remplacez pas la valeur des indicateurs de démarrage pour le service donné si ce service existe déjà dans le système et a une valeur existante. Pour plus d’informations, consultez la directive BootFlags ci-dessous.

service-install-section
Fait référence à une section définie par INF-writer qui contient des informations pour l’installation du service nommé pour cet appareil (ou appareils). Pour plus d’informations, consultez la section Remarques suivante.

event-log-install-section
Fait éventuellement référence à une section définie par un enregistreur INF dans laquelle les services de journalisation des événements pour cet appareil (ou appareils) sont configurés.

EventLogType
Spécifie éventuellement l’un des paramètres Système, Sécurité ou Application. En cas d’omission, cette valeur par défaut est System, qui est presque toujours la valeur appropriée pour l’installation des pilotes de périphérique.

Par exemple, un inf ne spécifie La sécurité que si le pilote à installer fournit sa propre prise en charge de la sécurité.

EventName
Spécifie éventuellement un nom à utiliser pour le journal des événements. En cas d’omission, cette valeur est définie par défaut sur serviceName donné.

Remarques

Les extensions définies par le système et qui ne respectent pas la casse peuvent être insérées dans un DDInstall. Section Services qui contient une directive AddService dans les fichiers INF interplateformes de système d’exploitation et/ou de plateforme pour spécifier des installations spécifiques à la plateforme ou au système d’exploitation.

Chaque nom de section créé par l’enregistreur INF doit être unique dans le fichier INF et doit suivre les règles générales de définition des noms de section. Pour plus d’informations sur ces règles, consultez Règles de syntaxe générales pour les fichiers INF.

Une directive AddService doit référencer une section d’installation de service nommée ailleurs dans le fichier INF. Chacune de ces sections a la forme suivante :

[service-install-section]
 
[DisplayName=name]
[Description=description-string]
ServiceType=type-code
StartType=start-code
ErrorControl=error-control-level
ServiceBinary=path-to-service
[StartName=service-start-name]
[AddReg=add-registry-section[, add-registry-section] ...]
[DelReg=del-registry-section[, del-registry-section] ...]
[BitReg=bit-registry-section[,bit-registry-section] ...]
[LoadOrderGroup=load-order-group-name]
[Dependencies=depend-on-item-name[,depend-on-item-name]
[Security="security-descriptor-string"]...]
[RequiredPrivileges=privilege-name[,privilege-name]...] (Windows 7 and later versions of Windows)
[ServiceSidType=value] (Windows 10 Version 2004 and later versions of Windows)
[DelayedAutoStart=value] (Windows 10 Version 2004 and later versions of Windows)
[AddTrigger=service-trigger-install-section[, service-trigger-install-section, ...]] (Windows 10 Version 2004 and later versions of Windows)
[FailureActions=service-failure-actions-install-section] (Windows 11 version 22H2 and later versions of Windows)
[BootFlags=value] (Windows 11 build 25381 and later versions of Windows)

Chaque section d’installation de service doit avoir au moins les entrées ServiceType, StartType, ErrorControl et ServiceBinary , comme illustré ici. Toutefois, les entrées restantes sont facultatives.

Service-Install entrées et valeurs de section

Displayname=Nom
Spécifie un nom convivial pour le service/pilote, généralement pour faciliter la localisation, exprimé sous la forme d’un jeton %strkey% défini dans une section Chaînes du fichier INF.

Description=description-string
Spécifie éventuellement une chaîne qui décrit le service, généralement exprimé sous la forme d’un jeton %strkey% défini dans une section Chaînes du fichier INF.

Cette chaîne donne à l’utilisateur plus d’informations sur le service que le DisplayName. Par exemple, le DisplayName peut être quelque chose comme « Client DHCP » et la Description peut être quelque chose comme « Gère la configuration réseau en inscrivant et en mettant à jour les adresses IP et les noms DNS ».

La chaîne de description doit être suffisamment longue pour être descriptive, mais pas trop longtemps pour être gênante. Si une chaîne de description contient des jetons %strkey%, chaque jeton peut représenter un maximum de 511 caractères. La chaîne totale, après toute substitution de jeton de chaîne, ne doit pas dépasser 1 024 caractères.

Servicetype=type-code
Le type-code d’un pilote de périphérique en mode noyau doit être défini sur 0x00000001 (SERVICE_KERNEL_DRIVER).

Le type de code d’un service Microsoft Win32 installé pour un appareil doit être défini sur 0x00000010 (SERVICE_WIN32_OWN_PROCESS) ou 0x00000020 (SERVICE_WIN32_SHARE_PROCESS). Si le service Win32 peut interagir avec le bureau, la valeur de type-code doit être combinée avec 0x00000100 (SERVICE_INTERACTIVE_PROCESS).

Le type-code d’un pilote réseau de niveau supérieur, tel qu’un redirecteur ou un pilote de système de fichiers, doit être défini sur 0x00000002 (SERVICE_FILE_SYSTEM_DRIVER).

Les constantes SERVICE_xxxx sont définies dans Wdm.h et Ntddk.h.

StartType=start-code
Spécifie quand démarrer le pilote en tant que l’une des valeurs numériques suivantes, exprimées en décimal ou, comme indiqué dans la liste suivante, en notation hexadécimale.

0x0 (SERVICE_BOOT_START)
Indique un pilote démarré par le chargeur du système d’exploitation.

Cette valeur doit être utilisée pour les pilotes d’appareils requis pour le chargement du système d’exploitation.

0x1 (SERVICE_SYSTEM_START)
Indique un pilote démarré lors de l’initialisation du système d’exploitation.

Cette valeur doit être utilisée par les pilotes PnP qui effectuent la détection des périphériques pendant l’initialisation, mais qui ne sont pas nécessaires pour charger le système.

Par exemple, un pilote PnP qui peut également détecter un appareil hérité doit spécifier cette valeur dans son INF afin que sa routine DriverEntry soit appelée pour rechercher l’appareil hérité, même si ce périphérique ne peut pas être énuméré par le gestionnaire PnP.

0x2 (SERVICE_AUTO_START)
Indique un service démarré par le gestionnaire de contrôle de service lors du démarrage du système.

Cette valeur ne doit jamais être utilisée dans les fichiers INF pour les pilotes de périphérique WDM ou PnP.

0x3 (SERVICE_DEMAND_START)
Indique un service démarré à la demande, soit par le gestionnaire PnP lorsque l’appareil correspondant est énuméré, soit éventuellement par le gestionnaire de contrôle de service en réponse à une demande explicite de l’utilisateur pour un appareil non PnP.

Cette valeur doit être utilisée dans les fichiers INF pour tous les pilotes WDM des périphériques qui ne sont pas requis pour charger le système et pour tous les pilotes de périphériques PnP qui ne sont pas requis pour charger le système ni engagés dans la détection des appareils.

0x4 (SERVICE_DISABLED)
Indique un service qui ne peut pas être démarré.

Cette valeur peut être utilisée pour désactiver temporairement les services de pilote pour un appareil. Toutefois, un périphérique/pilote ne peut pas être installé si cette valeur est spécifiée dans la section d’installation de service de son fichier INF.

Pour plus d’informations sur StartType, consultez Spécification de l’ordre de chargement du pilote.

ErrorControl=error-control-level
Spécifie le niveau de contrôle d’erreur comme l’une des valeurs numériques suivantes, exprimées soit en décimales, soit, comme indiqué dans la liste suivante, en notation hexadécimale.

0x0 (SERVICE_ERROR_IGNORE)
Si le pilote ne parvient pas à charger ou à initialiser, procédez au démarrage du système et n’affichez pas d’avertissement à l’utilisateur.

0x1 (SERVICE_ERROR_NORMAL)
Si le pilote ne parvient pas à charger ou à initialiser son appareil, le démarrage du système doit se poursuivre, mais afficher un avertissement à l’utilisateur.

0x2 (SERVICE_ERROR_SEVERE)
Si le pilote ne parvient pas à charger, le démarrage du système doit basculer vers le jeu de contrôles LastKnownGood du Registre et poursuivre le démarrage du système, même si le pilote indique à nouveau une erreur de chargement ou d’initialisation de périphérique/pilote.

0x3 (SERVICE_ERROR_CRITICAL)
Si le pilote ne parvient pas à se charger et que le démarrage du système n’utilise pas l’ensemble de contrôles LastKnownGood du Registre, basculez vers LastKnownGood et réessayez.

Si le démarrage échoue toujours lors de l’utilisation de LastKnownGood, exécutez une routine de case activée de bogues. (Seuls les périphériques/pilotes nécessaires au démarrage du système spécifient cette valeur dans leurs fichiers INF.)

ServiceBinary=chemin d’accès au service
Spécifie le chemin du fichier binaire pour le service, exprimé sous la forme %dirid%\filename.

Le numéro dirid est un identificateur de répertoire personnalisé ou l’un des identificateurs de répertoire définis par le système décrits dans Utilisation de Dirids. Le nom de fichier donné spécifie un fichier déjà transféré (voir la directive INF CopyFiles) du média de distribution source vers ce répertoire sur l’ordinateur cible.

StartName=service-start-name Cette entrée facultative spécifie un nom de début qui doit être associé au service. Si type-code spécifie 1 (SERVICE_KERNEL_DRIVER) ou 2 (SERVICE_FILE_SYSTEM_DRIVER), ce nom est le nom de l’objet de pilote que le gestionnaire d’E/S utilise pour charger le pilote. Si type-code contient le bit 0x00000010 (SERVICE_WIN32_OWN_PROCESS) ou 0x00000020 (SERVICE_WIN32_SHARE_PROCESS), ce nom peut être l’une des valeurs valides pour le paramètre lpServiceStartName de l’API CreateService .

AddReg=add-registry-section[,add-registry-section]...
Référence une ou plusieurs sections add-registry définies par l’enregistreur INF dans lesquelles toutes les informations de registre pertinentes pour les services nouvellement installés sont configurées. Pour plus d’informations, consultez Directive INF AddReg.

DelReg=del-registry-section[,del-registry-section]...
Fait référence à une ou plusieurs sections del-registry définies par l’enregistreur INF dans lesquelles les informations de Registre pertinentes pour un service déjà installé sont supprimées. Pour plus d’informations, consultez Directive INF DelReg.

Cette directive n’est presque jamais utilisée dans une section d’installation de service, mais elle peut être utilisée dans un INF qui « met à jour » le Registre pour une installation précédente des mêmes services de périphérique/pilote.

BitReg=bit-registry-section[,bit-registry-section]...
Est valide dans une section d’installation de service , mais presque jamais utilisé.

LoadOrderGroup=load-order-group-name
Cette entrée facultative identifie le groupe d’ordre de chargement dont ce pilote est membre. Il peut s’agir de l’un des groupes d’ordre de chargement « standard », tels que la classe SCSI ou NDIS.

En général, cette entrée n’est pas nécessaire pour les appareils dotés de pilotes WDM ou pour les appareils PnP exclusivement, sauf s’il existe des dépendances héritées sur un tel groupe. Toutefois, cette entrée peut être utile si la détection d’appareil est prise en charge par le chargement d’un groupe de pilotes dans un ordre particulier.

Pour plus d’informations sur LoadOrderGroup, consultez Spécification de l’ordre de chargement du pilote.

Dépendances=depend-on-item-name[,depend-on-item-name]... Chaque élément depend-on-item-name dans une liste de dépendances spécifie le nom d’un service ou d’un groupe d’ordre de chargement dont dépend le périphérique/pilote.

Si le depend-on-item-name spécifie un service, le service qui doit être en cours d’exécution avant le démarrage de ce pilote. Par exemple, l’INF pour les services d’impression TCP/IP Win32 fournis par le système dépend de la prise en charge de la pile de transport TCP/IP sous-jacente (en mode noyau). Par conséquent, l’inf pour les services d’impression TCP/IP spécifie cette entrée comme Dependencies=TCPIP.

Un depend-on-item-name peut spécifier un groupe d’ordre de chargement dont dépend ce périphérique/pilote. Un tel pilote est démarré uniquement si au moins un membre du groupe spécifié a été démarré. Précédez le nom du groupe d’un signe plus (+). Par exemple, l’inf des services RAS système peut avoir une entrée comme Dependencies = +NetBIOSGroup,RpcSS qui répertorie à la fois un groupe d’ordre de chargement et un service.

Security="security-descriptor-string »
Spécifie un descripteur de sécurité à appliquer au service. Ce descripteur de sécurité spécifie les autorisations requises pour effectuer des opérations telles que le démarrage, l’arrêt et la configuration du service. La valeur security-descriptor-string est une chaîne avec des jetons pour indiquer le composant de sécurité DACL (D :).

Pour plus d’informations sur les chaînes de descripteur de sécurité, consultez Security Descriptor Definition Language (Windows). Pour plus d’informations sur le format des chaînes de descripteur de sécurité, consultez Security Descriptor Definition Language (Windows).

Pour plus d’informations sur la spécification des descripteurs de sécurité, consultez Création d’installations d’appareils sécurisées.

RequiredPrivileges=privilege-name[,privilege-name]...

Notes

Cette valeur ne peut être utilisée que pour les services Win32 et n’est disponible que sur Windows 7 et versions ultérieures.

Chaque privilege-name de la liste est le nom d’un privilège dont le service a besoin. Pour obtenir la liste des noms de privilèges, consultez Constantes de privilèges (Windows). Pour chaque nom de privilège, seul le nom texte est requis. Par exemple, le nom du privilège doit être écrit « SeAuditPrivilege », mais pas SE_AUDIT_NAME.

Pour plus d’informations sur les privilèges requis par le service, consultez SERVICE_REQUIRED_PRIVILEGES_INFO (Windows).

ServiceSidType=Valeur

Notes

Cette valeur ne peut être utilisée que pour les services Win32 et n’est disponible qu’avec Windows 10 version 2004 et ultérieure.

Cette entrée peut utiliser n’importe quelle valeur valide, comme décrit dans SERVICE_SID_INFO.

DelayedAutoStart=Valeur

Notes

Cette valeur ne peut être utilisée que pour les services Win32 et n’est disponible qu’avec Windows 10 2004 et versions ultérieures.

Contient le paramètre de démarrage automatique différé d’un service de démarrage automatique.

Si ce membre est 0x0, le service est démarré au démarrage du système. Dans le cas contraire, le service est démarré après le démarrage d’autres services de démarrage automatique, plus un court délai.

Ce paramètre est ignoré, sauf s’il s’agit d’un service de démarrage automatique.

Pour plus d’informations, consultez cette page.

AddTrigger=service-trigger-install-section [, service-trigger-install-section, ...]
Spécifie les événements déclencheurs à inscrire pour le service Win32 afin que le service puisse être démarré ou arrêté lorsqu’un événement de déclencheur se produit. Pour plus d’informations sur les événements de déclencheur de service, consultez Événements de déclencheur de service.

Chaque section nommée service-trigger-install référencée par une directive AddTrigger a le format suivant :

[service-trigger-install-section]

TriggerType=trigger-type
Action=action-type
SubType=trigger-subtype
[DataItem=data-type,data]
...

BootFlags=Valeur

Notes

Cette valeur ne peut être utilisée qu’avec les services de pilote en mode noyau et n’est disponible qu’avec Windows 11 build 25381 et versions ultérieures.

Spécifie éventuellement quand le système d’exploitation doit promouvoir la valeur StartType d’un pilote en 0x0 (SERVICE_BOOT_START). Vous pouvez spécifier une ou plusieurs (ORed) des valeurs numériques suivantes, exprimées sous forme de valeurs hexadécimales.

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) Indique que le pilote doit être promu en cas de démarrage à partir du réseau.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) Indique que le pilote doit être promu en cas de démarrage à partir d’un disque dur virtuel.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD)
    Indique que le pilote doit être promu en cas de démarrage à partir d’un disque USB.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
    Indique que le pilote doit être promu en cas de démarrage à partir du stockage SD.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD)
    Indique que le pilote doit être promu en cas de démarrage à partir d’un disque sur un contrôleur USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) Indique que le pilote doit être promu si le démarrage pendant le démarrage mesuré est activé.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD)
    Indique que le pilote doit être promu si le démarrage du vérificateur est activé.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD)
    Indique que le pilote doit être promu si vous démarrez sur WinPE.

Valeurs et entrées de section service-trigger-install-section

TriggerType=type de déclencheur
Spécifie le type d’événement du déclencheur de service dans l’une des valeurs numériques suivantes, exprimées soit en décimales, soit, comme indiqué dans la liste suivante, en notation hexadécimale :

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
Indique que l’événement est déclenché lorsqu’un appareil de la classe d’interface d’appareil spécifiée arrive ou est présent au démarrage du système.

Pour plus d’informations, consultez structure SERVICE_TRIGGER.

Action=type d’action
Spécifie l’action à entreprendre lorsque l’événement de déclencheur spécifié se produit.

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
Démarrez le service lorsque l’événement de déclencheur spécifié se produit.

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
Arrêtez le service lorsque l’événement de déclencheur spécifié se produit.

Pour plus d’informations, consultez structure SERVICE_TRIGGER.

Sous-type=trigger-subtype
Spécifie un GUID qui identifie le sous-type d’événement déclencheur. La valeur dépend de la valeur du TriggerType.

Lorsque TriggerType est 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), SubType spécifie le GUID qui identifie la classe d’interface d’appareil.

Pour plus d’informations, consultez structure SERVICE_TRIGGER.

Dataitem=type de données, données
Spécifie éventuellement les données spécifiques au déclencheur pour un événement de déclencheur de service.

Lorsque TriggerType est 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), un DataItem facultatif peut être spécifié avec un type de données de 0x2 (SERVICE_TRIGGER_DATA_TYPE_STRING) pour étendre la classe d’interface d’appareil à un ID matériel ou à un ID compatible spécifique.

Pour plus d’informations, consultez structure SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

La meilleure pratique pour utiliser la directive AddTrigger consiste à déclencher le démarrage du service à l’arrivée de l’interface de l’appareil. Pour plus d’informations, consultez Interaction des services Win32 avec les appareils.

Notes

La syntaxe AddTrigger n’est disponible que dans Windows 10 version 2004 et version ultérieure.

FailureActions=service-failure-actions-install-section
Spécifie éventuellement l’action que le contrôleur de service doit effectuer en cas d’échec d’un service.

Le gestionnaire de contrôle de service compte le nombre de fois où chaque service a échoué depuis le démarrage du système. Le nombre est réinitialisé à 0 si le service n’a pas échoué pendant la période de réinitialisation secondes. Lorsque le service échoue pour la Nième fois, le contrôleur de service effectue l’action spécifiée dans l’élément N de la liste Action. Si N est supérieur au nombre d’actions, le contrôleur de service répète la dernière action de la liste.

La section service-failure-actions-install-référencée par une directive FailureActions a le format suivant :

[service-failure-actions-install-section]

[ResetPeriod=reset-period]
[NonCrashFailures=value]
Action=failure-action-type,delay
[Action=failure-action-type,delay]
...

Valeurs et entrées de section Service-Failure-Actions-Install-Section

ResetPeriod=période de réinitialisation
Spécifie le délai après lequel réinitialiser le nombre d’échecs à zéro en l’absence d’échecs, en secondes. Le nombre d’échecs n’est pas réinitialisé par défaut lorsqu’aucune période de réinitialisation n’est spécifiée.

Pour plus d’informations, consultez structure SERVICE_FAILURE_ACTIONSW.

NonCrashFailures=Valeur
Contient le paramètre d’indicateur d’actions d’échec d’un service. Le paramètre détermine quand les actions d’échec doivent être exécutées. Une valeur de 0x0 indique False et une valeur de 0x1 indique True.

Pour plus d’informations, consultez structure SERVICE_FAILURE_ACTIONS_FLAG (winsvc.h).

Action=failure-action-type,delay
Spécifie une action que le gestionnaire de contrôle de service peut effectuer. Plusieurs entrées d’action forment une liste ordonnée d’actions d’échec. Pour plus d’informations, consultez structure SC_ACTION.

Notes

La syntaxe FailureActions ne peut être utilisée que pour Win32 Services et est disponible à partir de Windows 11, version 22H2.

Spécification de l’ordre de chargement du pilote

Le système d’exploitation charge les pilotes en fonction de la valeur StartType de la section d’installation du service, comme suit :

  • Pendant la phase de démarrage, le système d’exploitation charge tous les pilotes 0x0 (SERVICE_BOOT_START).

  • Pendant la phase de démarrage du système, le système d’exploitation charge d’abord tous les pilotes WDM et PnP pour lesquels le gestionnaire PnP recherche des nœuds d’appareil (devnodes) (que leurs fichiers INF spécifient 0x01 pour SERVICE_SYSTEM_START ou 0x03 pour SERVICE_DEMAND_START). Ensuite, le système d’exploitation charge tous les pilotes SERVICE_SYSTEM_START restants.

  • Pendant la phase de démarrage automatique, le système d’exploitation charge tous les pilotes SERVICE_AUTO_START restants.

Pour plus d’informations sur les dépendances, consultez Spécification de l’ordre de chargement du pilote.

Promotion du startType d’un pilote au démarrage en fonction du scénario de démarrage

Selon le scénario de démarrage, vous pouvez utiliser la valeur de Registre BootFlags pour contrôler quand le système d’exploitation doit promouvoir la valeur StartType d’un pilote en 0x0 (SERVICE_BOOT_START). Vous pouvez spécifier une ou plusieurs (ORed) des valeurs numériques suivantes, exprimées sous forme de valeur hexadécimale :

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) indique que le pilote doit être promu en cas de démarrage à partir du réseau.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) indique que le pilote doit être promu en cas de démarrage à partir d’un disque dur virtuel.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD) indique que le pilote doit être promu en cas de démarrage à partir d’un disque USB.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD) indique que le pilote doit être promu en cas de démarrage à partir du stockage SD.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD) indique que le pilote doit être promu en cas de démarrage à partir d’un disque sur un contrôleur USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) indique que le pilote doit être promu si le démarrage pendant le démarrage mesuré est activé.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD) indique que le pilote doit être promu si le démarrage est activé avec le démarrage du vérificateur.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD) indique que le pilote doit être promu en cas de démarrage sur WinPE.

La section installation du service a la forme générale suivante :

[service-install-section]
AddReg=add-registry-section
...

[add-registry-section]
HKR,,BootFlags,0x00010003,0x14 ; CM_SERVICE_USB3_DISK_BOOT_LOAD|CM_SERVICE_USB_DISK_BOOT_LOAD

Notes

Cette syntaxe doit être utilisée uniquement dans les versions de Windows et les builds antérieures à Windows 11 build 25381 ; pour Windows 11 build 25381 et versions ultérieures, utilisez la directive BootFlags.

Inscription à la journalisation des événements

Une directive AddService peut également référencer une section event-log-install-section ailleurs dans le fichier INF. Chacune de ces sections a la forme suivante :

[event-log-install-section]
 
AddReg=add-registry-section[, add-registry-section]...
[DelReg=del-registry-section[, del-registry-section]...] 
[BitReg=bit-registry-section[,bit-registry-section]...]
 ...

Pour un fichier INF de périphérique/pilote classique, la section event-log-install-utilise uniquement la directive AddReg pour configurer un fichier de message de journalisation des événements pour le pilote. Cette section complémentaire de journalisation des événements a la forme générale suivante :

[drivername_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"path\IoLogMsg.dll;path\driver.sys"
HKR,,TypesSupported,0x00010001,7 

En particulier, la section ajoute deux entrées de valeur dans la sous-clé de Registre créée pour le périphérique/pilote, comme suit :

  • L’entrée de valeur nommée EventMessageFile est de type REG_EXPAND_SZ, comme spécifié par la valeur FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000. Sa valeur, placée entre guillemets doubles (« ), associe le IoLogMsg.dll fourni par le système (mais il peut associer une autre DLL de journalisation) au fichier binaire du pilote. En règle générale, les chemins d’accès à chacun de ces fichiers sont spécifiés comme suit :

    %%SystemRoot%%\System32\IoLogMsg.dll

    %%SystemRoot%%\System32\drivers\driver.sys

  • L’entrée de valeur nommée TypesSupported est de type REG_DWORD, comme spécifié par la valeur FLG_ADDREG_TYPE_DWORD 0x00010001.

    Pour les pilotes, cette valeur doit être 7. Cette valeur équivaut à l’OR au niveau du bit de EVENTLOG_SUCCESS, EVENTLOG_ERROR_TYPE, EVENTLOG_WARNING_TYPE et EVENTLOG_INFORMATION_TYPE, sans définir les bits EVENTLOG_AUDIT__XXX_.

Une section event-log-install-section peut également utiliser la directive DelReg pour supprimer un fichier de message du journal des événements précédemment installé, en supprimant explicitement les entrées de valeur EventMessageFile et TypesSupported existantes, si un fichier binaire de pilote est remplacé par un pilote nouvellement installé. (Voir aussi directive Inf DelService.)

Bien qu’une directive BitReg soit également valide dans unesectionevent-log-install- définie par un enregistreur INF, elle n’est presque jamais utilisée, car les entrées de valeur standard pour la journalisation des événements de pilote de périphérique ne sont pas des masques de bits.

Exemples

Cet exemple montre les sections service-install et event-log-install référencées par la directive AddService , comme indiqué précédemment dans l’exemple pour DDInstall. Services.

[Example_DDInstall.Services]
AddService=ExampleFunctionDriver,0x00000002,function_ServiceInstallSection
AddService=ExampleUpperFilter,,filter_ServiceInstallSection

[function_ServiceInstallSection]
DisplayName    = %function_ServiceDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleFunctionDriver.sys

[function_EventLogInstallSection]
AddReg = function_EventLog_AddReg

[function_EventLog_AddReg]
;
; Following entry on single line in INF file. Enclosing quotation marks 
; prevent the semicolon from being interpreted as a comment.
;
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll;
       %13%\ExampleFunctionDriver.sys"
HKR,,TypesSupported,0x00010001,7

[filter_ServiceInstallSection]
DisplayName    = %filter_ServiceDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleUpperFilter.sys

[Strings] ; only immediately preceding %strkey% tokens shown here
%function_ServiceDesc%="Example function driver service"
%filter_ServiceDesc%="Example filter driver service"

Voir aussi