Partager via


Création d’un fichier INF pour un pilote de minifiltre

Les pilotes de minifiltre du système de fichiers ont besoin d’un fichier INF pour être installés sur le système d’exploitation Windows. Vous pouvez trouver plusieurs exemples de fichiers INF dans les échantillons de minifiltre que vous pouvez utiliser comme point de départ.

À partir de la version 1903 de Windows 10, les exigences INF ont changé pour les pilotes primitifs, y compris les minifiltres du système de fichiers. Veuillez consulter la section Création d’un nouveau pilote primitif pour plus de détails.

Sections INF pour un pilote de filtre du système de fichiers

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

Section Notes
Version Requis
DestinationDirs Requis
DefaultInstall Requis
DefaultInstall.Services Requis
ServiceInstall Requis
AddRegistry Requis
Chaînes Requis

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

Tous les pilotes fonctionnant sur des versions 64 bits de systèmes Windows doivent être signés pour que Windows les charge. Pour plus d’informations, veuillez consulter la section Signature d’un pilote.

Section Version (requise)

La section Version spécifie une classe et un GUID déterminés par le type de pilote de minifiltre, comme indiqué 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 montre 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 Veuillez consulter la section Classes de pilotes de filtre système de fichiers et GUID de classe.
ClassGuid Veuillez consulter la section Classes de pilotes de filtre système de fichiers et GUID de classe.
Fournisseur Dans votre propre fichier INF, vous devez spécifier un fournisseur autre que Microsoft.
DriverVer Veuillez consulter la section Directive DriverVer d’INF.
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 de minifiltre doivent laisser cette entrée vide. Pour plus d’informations, veuillez consulter la description de l’entrée CatalogFile dans la section Version d’INF.

Section DestinationDirs (obligatoire)

La section DestinationDirs spécifie les répertoires où les fichiers du pilote de minifiltre et de l’application doivent être copiés.

Dans cette section et dans la section ServiceInstall, vous pouvez spécifier des répertoires système bien connus à l’aide de valeurs numériques définies par le système. Pour une liste de ces valeurs, veuillez consulter la section DestinationDirs d’INF. Dans l'exemple de code suivant, la valeur 13 fait référence à un emplacement du magasin de pilotes défini par le système d'exploitation sur le système.

[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles   = 13

Section DefaultInstall (requise)

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

Remarque

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

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 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, veuillez consulter la section Création de fichiers INF pour plusieurs plateformes et systèmes d’exploitation.

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

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

Section DefaultInstall.Services (requise)

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

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

Section ServiceInstall (requise)

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

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %13%\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 de minifiltre doivent spécifier une valeur de 2 (SERVICE_FILE_SYSTEM_DRIVER). Pour plus d’informations sur l’entrée ServiceType, veuillez consulter la section Directive AddService d’INF.

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émarrage 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, voir « Types de démarrage des pilotes » dans la section Qu’est-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 de minifiltre et les pilotes de filtre du système de fichiers hérités. Vous devez spécifier une valeur LoadOrderGroup appropriée au type de pilote de minifiltre que vous développez. Pour choisir un groupe de chargement, veuillez consulter la section Groupes d’ordre de chargement et altitudes pour les pilotes de minifiltre.

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

Remarque

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 tout pilote de minifiltre.

Pour plus d’informations sur la manière dont les entrées StartType et LoadOrderGroup déterminent quand le pilote est chargé, veuillez consulter la section Qu’est-ce qui détermine quand un pilote est chargé.

Contrairement aux pilotes de filtre hérités, les valeurs StartType et LoadOrderGroup ne déterminent pas où le pilote de minifiltre se fixe dans la pile d’instances de minifiltre. Au lieu de cela, l’altitude spécifiée pour l’instance de minifiltre détermine l’emplacement.

L’entrée ErrorControl spécifie l’action à entreprendre si le service échoue à démarrer pendant le démarrage du système. Les pilotes de minifiltre doivent spécifier une valeur de 1 (SERVICE_ERROR_NORMAL). Pour plus d’informations sur l’entrée ErrorControl, veuillez consulter la section Directive AddService d’INF.

La directive AddReg fait référence à une ou plusieurs sections AddRegistry définies par le writer dans l’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 les instances de pilotes de minifiltre et spécifier une instance par défaut.

L’entrée Dependencies spécifie les noms de tous les services ou groupes d’ordre 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 (requise)

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 une nouvelle instance pour le pilote de minifiltre.

Dans l'exemple de pilote MiniSpy, la section AddRegistry suivante définit trois instances, dont l'une est désignée comme l'instance par défaut du pilote MiniSpy.

Remarque

Les valeurs suivantes devraient se trouver sous la sous-clé Paramètres à partir de Windows 11 version 24H2.

[Minispy.AddRegistry]
HKR,"Parameters","SupportedFeatures",0x00010001,0x3
HKR,"Parameters\Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Parameters\Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Parameters\Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
HKR,"Parameters\Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude%
HKR,"Parameters\Instances\"%Instance2.Name%,"Flags",0x00010001,%Instance2.Flags%
HKR,"Parameters\Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude%
HKR,"Parameters\Instances\"%Instance3.Name%,"Flags",0x00010001,%Instance3.Flags%

Section Strings (requise)

La section Strings définit chaque jeton %strkey% utilisé dans le fichier INF.

Vous pouvez créer un fichier INF international unique en créant des sections supplémentaires Strings.LanguageID spécifiques à la langue dans le fichier INF. Pour plus d’informations sur les fichiers INF internationaux, veuillez consulter la section Création de fichiers INF internationaux.

L’exemple de code suivant montre une section typique Strings.

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"

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

Remarque

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

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 de minifiltre. La directive DelService spécifiait toujours l’indicateur SPSVCINST_STOPSERVICE (0x00000200) pour arrêter le service avant qu’il ne soit supprimé.

L’exemple suivant montre des sections typiques DefaultUninstall et DefaultUninstall.Services avant Windows 10, version 1903.

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

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