Partager via


Ordre de chargement du filtre de système de fichiers

Le système d’exploitation Windows charge les pilotes de filtre de système de fichiers en fonction de :

  • Le type de démarrage du pilote, où chaque type de démarrage représente des phases du démarrage d’un système.
  • Les groupes d’ordre de chargement pour les pilotes de filtre de système de fichiers qui sont chargés au démarrage du système. Les pilotes minifiltre ont besoin du concept de groupes d’ordre de chargement pour l’interopérabilité avec les anciens pilotes de filtre de système de fichiers. Un pilote minifiltre peut être chargé à tout moment.

Il est nécessaire de comprendre les types de démarrage des pilotes et les groupes d’ordre de chargement avant d’explorer quand et comment les pilotes de filtre de système de fichiers sont chargés pendant la séquence de démarrage du système.

Types de démarrage de pilotes

Le type de démarrage d’un pilote en mode noyau spécifie si le pilote doit être chargé pendant ou après le démarrage du système. Il existe cinq types de démarrage possibles :

Type de démarrage Description
SERVICE_BOOT_START (0x00000000) Indique un pilote démarré par le chargeur du système d’exploitation (OS). Les pilotes de filtre de système de fichiers utilisent généralement ce type de démarrage ou SERVICE_DEMAND_START. Les filtres de systèmes de fichiers anciens doivent utiliser ce type de démarrage. Pour plus d’informations, veuillez consulter la section groupes d’ordre de chargement des filtres de système de fichiers.
SERVICE_SYSTEM_START (0x00000001) Indique un pilote démarré pendant l’initialisation de l’OS. Ce type de démarrage est utilisé par le système de reconnaissance de fichiers. À l’exception des systèmes de fichiers répertoriés dans « SERVICE_DISABLED », les systèmes de fichiers (y compris les composants de systèmes de fichiers en réseau) utilisent généralement ce type de démarrage ou SERVICE_DEMAND_START. Ce type de démarrage est également utilisé par les pilotes de périphériques pour les appareils PnP qui sont énumérés lors de l’initialisation du système mais qui ne sont pas nécessaires pour charger le système.
SERVICE_AUTO_START (0x00000002) Indique un pilote démarré par le Service Control Manager au démarrage du système. Rarement utilisé.
SERVICE_DEMAND_START (0x00000003) Indique un pilote démarré à la demande, soit par le PnP Manager (pour les pilotes de périphériques) soit par le Service Control Manager (pour les systèmes de fichiers et les pilotes de filtre de système de fichiers).
SERVICE_DISABLED (0x00000004) Indique un pilote qui n’est pas démarré par le chargeur du système d’exploitation, le Service Control Manager ou le PnP Manager. Utilisé par les systèmes de fichiers qui sont chargés par un système de reconnaissance de fichiers (sauf lorsqu’ils sont le système de fichiers de démarrage) ou par un autre système de fichiers pour EFS. Ces systèmes de fichiers incluent CDFS, EFS, FastFat, NTFS et UDFS. Également utilisé pour désactiver temporairement un pilote pendant le débogage.

Tous les pilotes qui spécifient un type de démarrage de SERVICE_BOOT_START sont chargés avant les pilotes avec un type de démarrage de SERVICE_SYSTEM_START ou SERVICE_AUTO_START. Au sein de chaque catégorie de type de démarrage, le groupe d’ordre de chargement détermine quand les pilotes de filtre de système de fichiers (et les anciens pilotes de filtre) seront chargés.

Spécification du type de démarrage

Un auteur de pilote peut spécifier le type de démarrage d’un pilote lors de l’installation de l’une des manières suivantes :

  • En spécifiant le type de démarrage souhaité pour l’entrée StartType dans la section d’installation du service référencée par une directive AddService dans le fichier INF du pilote. Cette méthode est décrite dans la section ServiceInstall de Création d’un fichier INF pour un pilote de filtre.

  • En passant le type de démarrage souhaité pour le paramètre dwStartType lors de l’appel à CreateService ou ChangeServiceConfig à partir d’un programme d’installation en mode utilisateur. Cette méthode est décrite dans les entrées de référence pour CreateService et ChangeServiceConfig dans la documentation du Microsoft Windows SDK.

Groupes d’ordre de chargement de pilotes

Dans les types de démarrage SERVICE_BOOT_START et SERVICE_SYSTEM_START, le groupe d’ordre de chargement de chaque pilote spécifie l’ordre relatif dans lequel les pilotes sont chargés.

Les pilotes dont le type de démarrage est SERVICE_BOOT_START sont appelés pilotes de démarrage (ou pilotes de démarrage). Les filtres qui sont des pilotes de démarrage appartiennent généralement à l’un des groupes d’ordre de chargement FSFilter. Ces groupes d’ordre de chargement sont décrits en détail dans la section Groupes d’ordre de chargement des filtres de système de fichiers.

Les pilotes dont le type de démarrage est SERVICE_SYSTEM_START sont également chargés selon l’ordre des groupes d’ordre de chargement auxquels ils appartiennent. Cependant, aucun pilote démarré par le système n’est chargé avant que tous les pilotes de démarrage ne soient chargés.

Les groupes d’ordre de chargement sont ignorés pour les pilotes dont le type de démarrage est SERVICE_AUTO_START, SERVICE_DEMAND_START ou SERVICE_DISABLED.

Une liste complète et ordonnée des groupes d’ordre de chargement peut être trouvée sous la sous-clé ServiceGroupOrder de la clé de registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control.

Le même ordre de groupe de chargement est utilisé pour les pilotes SERVICE_BOOT_START et SERVICE_SYSTEM_START. Cependant, tous les pilotes SERVICE_BOOT_START sont chargés et démarrés avant que tous les pilotes SERVICE_SYSTEM_START ne soient chargés.

Spécification du groupe d’ordre de chargement

Un auteur de pilote peut spécifier le groupe d’ordre de chargement d’un pilote lors de l’installation de l’une des manières suivantes :

  • En spécifiant le groupe d’ordre de chargement souhaité pour l’entrée LoadOrderGroup dans la section d’installation du service référencée par une directive AddService dans le fichier INF du pilote. Cette méthode est décrite dans la section ServiceInstall de Création d’un fichier INF pour un pilote de filtre.

  • En passant le type de démarrage souhaité pour le paramètre lpLoadOrderGroup lors de l’appel à CreateService ou ChangeServiceConfig à partir d’un programme d’installation en mode utilisateur. Cette méthode est décrite dans les entrées de référence pour CreateService et ChangeServiceConfig dans la documentation du Microsoft Windows SDK.

Pour plus d’informations générales sur l’ordre de chargement des pilotes et les groupes d’ordre de chargement, veuillez consulter la section Spécification de l’ordre de chargement des pilotes.

Règles pour le chargement d’un pilote de filtre

Les règles suivantes concernant le type de démarrage et les groupes d’ordre de chargement déterminent quand un pilote de filtre sera chargé :

  • Un pilote de filtre qui spécifie un type de démarrage particulier et un groupe d’ordre de chargement est chargé en même temps que tous les autres pilotes de filtre de ce type de démarrage et de ce groupe d’ordre de chargement.

  • Au sein de chaque groupe d’ordre de chargement, les pilotes de filtre minifiltre et anciens sont généralement chargés dans un ordre aléatoire. Ce cas entraîne généralement le chargement des pilotes en fonction de l’ordre dans lequel le pilote a été installé.

  • Si un pilote de filtre minifiltre ou ancien ne spécifie pas de groupe d’ordre de chargement, il est chargé après tous les autres pilotes du même type de démarrage qui spécifient un groupe d’ordre de chargement.