Partager via


Création d’un fichier INF pour un pilote minifilter

Introduction

Notes

À compter de Windows 10 version 1903, les exigences INF pour les pilotes primitifs (tels que les pilotes minifilter du système de fichiers) ont changé. Pour plus d’informations, consultez Création d’un pilote primitif .

Les pilotes de filtre ont besoin d’un fichier INF pour être installé sur le système d’exploitation Windows. Vous trouverez des exemples de fichiers INF dans les exemples de minifiltre.

Un fichier INF pour un pilote de filtre de système de fichiers contient généralement les sections suivantes :

Section Notes
Version Obligatoire
DestinationDirs Facultatif mais recommandé
DefaultInstall Obligatoire
DefaultInstall.Services Obligatoire
ServiceInstall Obligatoire
AddRegistry Obligatoire
Chaînes Obligatoire

Notes

À compter de Windows 10 version 1903, les sections DefaultUninstall et DefaultUninstall.Services sont interdites (avec exception). Ces sections étaient facultatives dans les versions antérieures du système d’exploitation.

Tous les pilotes exécutés sur les versions 64 bits des systèmes Windows doivent être signés avant que Windows ne les charge. Pour plus d’informations, consultez Signature d’un pilote .

Section Version (obligatoire)

La section Version spécifie une classe et un GUID qui sont déterminés par le type de pilote minifilter, comme illustré dans l’exemple de code suivant.

[Version]
Signature   = "$WINDOWS NT$"
Class       = "ActivityMonitor"
ClassGuid   = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider    = %Msft%
DriverVer   = 10/09/2001,1.0.0.0
CatalogFile =
PnpLockdown = 1

Le tableau suivant indique les valeurs que les pilotes de minifiltre du système de fichiers doivent spécifier dans la section Version .

Entrée Valeur
Signature « $WINDOWS NT$ »
Classe Consultez Classes de pilotes de filtre de système de fichiers et GUID de classe.
ClassGuid Consultez Classes de pilotes de filtre de système de fichiers et GUID de classe.
Fournisseur Dans votre propre fichier INF, vous devez spécifier un fournisseur autre que Microsoft.
DriverVer Consultez la directive INF DriverVer.
CatalogFile Pour les pilotes de minifiltre antivirus signés, cette entrée contient le nom d’un fichier catalogue fourni par WHQL. Tous les autres pilotes minifilter doivent laisser cette entrée vide. Pour plus d’informations, consultez la description de l’entrée CatalogFile dans la section Version INF

La section DestinationDirs spécifie les répertoires dans lesquels les fichiers du pilote minifilter et de l’application seront copiés.

Dans cette section et dans la section ServiceInstall , vous pouvez spécifier des répertoires système connus par des valeurs numériques définies par le système. Pour obtenir la liste de ces valeurs, consultez la section INF DestinationDirs. Dans l’exemple de code suivant, la valeur 12 fait référence au répertoire Drivers (%windir%\system32\drivers), et la valeur 10 fait référence au répertoire Windows (%windir%).

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

DefaultInstall, section (obligatoire)

Dans la section DefaultInstall , une directive CopyFiles copie les fichiers de pilotes et les fichiers d’application utilisateur du pilote minifilter dans les destinations spécifiées dans la section DestinationDirs .

Notes

La directive CopyFiles ne doit pas faire référence au fichier catalogue ou au fichier INF lui-même. SetupAPI copie automatiquement ces fichiers.

Vous pouvez créer un fichier INF unique pour installer votre pilote sur plusieurs versions des systèmes d’exploitation Windows. Vous pouvez créer ce type de fichier INF en créant des sections DefaultInstall et DefaultInstall.Services supplémentaires pour chaque version du système d’exploitation. Chaque section est étiquetée avec une décoration (par exemple, .ntx86, .ntia64 ou .nt) qui spécifie la version du système d’exploitation à laquelle elle s’applique. Pour plus d’informations sur la création de ce type de fichier INF, consultez Création de fichiers INF pour plusieurs plateformes et systèmes d’exploitation.

L’exemple de code suivant montre une section DefaultInstall classique.

[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles

DefaultInstall.Services, section (obligatoire)

La section DefaultInstall.Services contient une directive AddService qui contrôle comment et quand les services d’un pilote particulier sont chargés, comme illustré dans l’exemple de code suivant.

[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service

Section ServiceInstall (obligatoire)

La section ServiceInstall contient des informations utilisées pour charger le service de pilote. Dans l’exemple de pilote MiniSpy, cette section est nommée « Minispy.Service », comme illustré dans l’exemple de code suivant. Le nom de la section ServiceInstall doit apparaître dans une directive AddService de la section DefaultInstall.Services .

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %12%\minispy.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 3 ;    SERVICE_DEMAND_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg         = Minispy.AddRegistry
Dependencies   = FltMgr

L’entrée ServiceType spécifie le type de service. Les pilotes Minifilter doivent spécifier une valeur de 2 (SERVICE_FILE_SYSTEM_DRIVER). Pour plus d’informations sur l’entrée ServiceType , consultez Directive INF AddService.

L’entrée StartType spécifie quand démarrer le service. Le tableau suivant répertorie les valeurs possibles pour StartType et leurs types de début correspondants.

Valeur Description
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

Pour plus d’informations sur ces types de démarrage, consultez « Types de démarrage de pilote » dans Ce qui détermine quand un pilote est chargé.

L’entrée LoadOrderGroup fournit au gestionnaire de filtres les informations dont il a besoin pour garantir l’interopérabilité entre les pilotes minifilter et les pilotes de filtre de système de fichiers hérités. Vous devez spécifier une valeur LoadOrderGroup appropriée pour le type de pilote minifilter que vous développez. Pour choisir un groupe d’ordres de chargement, consultez Groupes d’ordre de chargement et Altitudes pour les pilotes minifiltres.

Notez que vous devez spécifier une valeur LoadOrderGroup , même si le type de démarrage de votre pilote minifiltre n’est pas SERVICE_BOOT_START. De cette façon, les pilotes de minifiltre sont différents des pilotes de filtre de système de fichiers hérités.

Notes

La valeur StartType du gestionnaire de filtres est SERVICE_BOOT_START et sa valeur LoadOrderGroup est FSFilter Infrastructure. Ces valeurs garantissent que le gestionnaire de filtres est toujours chargé avant le chargement des pilotes de minifiltre.

Pour plus d’informations sur la façon dont les entrées StartType et LoadOrderGroup déterminent quand le pilote est chargé, consultez Ce qui détermine quand un pilote est chargé.

Pour les pilotes de minifiltre, contrairement aux pilotes de filtre de système de fichiers hérités, les valeurs StartType et LoadOrderGroup ne déterminent pas l’emplacement où le pilote de minifiltre s’attache dans la pile du minifiltre instance. Cet emplacement est déterminé par l’altitude spécifiée pour le minifiltre instance.

L’entrée ErrorControl spécifie l’action à entreprendre si le service ne parvient pas à démarrer au démarrage du système. Les pilotes de minifiltre doivent spécifier la valeur 1 (SERVICE_ERROR_NORMAL). Pour plus d’informations sur l’entrée ErrorControl , consultez Directive AddService INF.

La directive AddReg fait référence à une ou plusieurs sections AddRegistry définies par un enregistreur INF qui contiennent des informations à stocker dans le Registre pour le service nouvellement installé. Les pilotes de minifiltre utilisent des sections AddRegistry pour définir des instances de pilotes de minifiltre et pour spécifier une instance par défaut.

L’entrée Dépendances spécifie les noms des services ou groupes de commandes de chargement dont dépend le pilote. Tous les pilotes de minifiltre doivent spécifier FltMgr, qui est le nom de service du gestionnaire de filtres.

Section AddRegistry (obligatoire)

La section AddRegistry ajoute des clés et des valeurs au Registre. Les pilotes de minifiltre utilisent une section AddRegistry pour définir des instances de minifiltre et spécifier une instance par défaut. Ces informations sont utilisées chaque fois que le gestionnaire de filtres crée un instance pour le pilote de minifiltre.

Dans l’exemple de pilote MiniSpy, la section AddRegistry suivante, ainsi que les définitions de jeton %strkey% de la section Chaînes, définissent trois instances, dont l’une est nommée comme instance par défaut de l’exemple de pilote MiniSpy.

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

Section Chaînes (obligatoire)

La section Chaînes définit chaque jeton %strkey% utilisé dans le fichier INF.

Vous pouvez créer un seul fichier INF international en créant des chaînes supplémentaires spécifiques aux paramètres régionaux. Sections LanguageID dans le fichier INF. Pour plus d’informations sur les fichiers INF internationaux, consultez Création de fichiers INF internationaux.

L’exemple de code suivant montre une section Chaînes standard.

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

DefaultInstance    = "Minispy - Top Instance"
Instance1.Name     = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags    = 0x1 ; Suppress automatic attachments
Instance2.Name     = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags    = 0x1 ; Suppress automatic attachments
Instance3.Name     = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags    = 0x1 ; Suppress automatic attachments

Sections DefaultUninstall et DefaultUninstall.Services

Notes

Les sections DefaultUninstall et DefaultUninstall.Services sont interdites (à l’exception) à partir de Windows 10 version 1903.

Dans Windows 10 avant la version 1903, les sections DefaultUninstall et DefaultUninstall.Services étaient facultatives, mais recommandées si le pilote pouvait être désinstallé :

  • DefaultUninstall contenait des directives DelFiles et DelReg pour supprimer des fichiers et des entrées de Registre.
  • DefaultUninstall.Services contenait des directives DelService pour supprimer les services du pilote minifiltre. La directive DelService a toujours spécifié l’indicateur de SPSVCINST_STOPSERVICE (0x00000200) pour arrêter le service avant sa suppression.

L’exemple suivant montre les sections DefaultUninstall et DefaultUninstall.Services classiques antérieures à Windows 10 version 1903.

[DefaultUninstall.NTamd64]
DelFiles   = Minispy.DriverFiles, Minispy.UserFiles
DelReg     = Minispy.DelRegistry

[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200