Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour la plupart des systèmes, la hiérarchie physique des appareils sur un ordinateur détermine l’ordre dans lequel Windows et le gestionnaire PnP chargent les pilotes. Windows et le gestionnaire PnP configurent les appareils à partir de l’appareil racine système, puis configurent les appareils enfants de l’appareil racine (par exemple, une carte PCI), les enfants de ces appareils, et ainsi de suite. Le gestionnaire PnP charge les pilotes pour chaque appareil à mesure que l’appareil est configuré, si les pilotes n’ont pas été précédemment chargés pour un autre appareil.
Les paramètres du fichier INF peuvent influencer l’ordre de chargement du pilote. Cette rubrique décrit les valeurs pertinentes que les fournisseurs doivent spécifier dans la service-install-section référencée par la directive INF AddService d’un pilote. Plus précisément, cette rubrique décrit les entrées StartType, BootFlags, LoadOrderGroup et Dependencies .
Les pilotes doivent suivre ces règles pour spécifier StartType :
Pilote PnP non nécessaire tôt dans le démarrage
Un pilote PnP doit avoir un type de démarrage de SERVICE_DEMAND_START (0x3), en spécifiant que le gestionnaire PnP peut charger le pilote lorsque le gestionnaire PnP trouve un périphérique que le pilote prend en charge.
Pilote d’un périphérique requis pour démarrer l’ordinateur
Si un appareil est requis pour démarrer l’ordinateur, les pilotes de l’appareil doivent avoir un type de démarrage de SERVICE_BOOT_START (0x0).
Pilote non-boot-start qui détecte les périphérique(s) qui ne sont pas énumérables PnP
Pour un appareil qui n’est pas énumérable PnP, un pilote signale l’appareil au gestionnaire PnP en appelant IoReportRootDevice ou IoReportDetectedDevice. Un tel pilote doit avoir le type de démarrage SERVICE_SYSTEM_START (0x01) afin que Windows charge le pilote pendant l’initialisation du système.
Seuls les pilotes qui signalent du matériel non PnP doivent définir ce type de démarrage. Si un pilote prend en charge à la fois des appareils PnP et non PnP, il doit définir ce type de démarrage.
Pilote non PnP qui doit être démarré par le gestionnaire de contrôle de service
Un tel pilote doit avoir le type de démarrage SERVICE_AUTO_START (0x02). Les pilotes PnP ne doivent pas définir ce type de démarrage.
Un pilote PnP doit être écrit afin qu’il puisse être chargé quand Windows configure un appareil qu’il prend en charge. À l’inverse, un pilote doit pouvoir être déchargé à tout moment, dès lors que le gestionnaire PnP détermine qu’il n’y a plus d’appareils présents que le pilote prend en charge. Les seuls ordres de chargement des pilotes dont les pilotes PnP doivent dépendre sont les suivants :
Les pilotes d’un appareil enfant peuvent dépendre du fait que les pilotes du périphérique parent sont chargés.
Un pilote dans la pile de pilotes peut dépendre du fait que tous les pilotes en dessous dans la pile sont chargés.
Par exemple, le pilote de fonction peut être certain que tous les pilotes de filtre inférieur sont chargés.
Toutefois, sachez qu’un pilote dans la pile d’appareils ne peut pas supposer un chargement séquentiel après les pilotes inférieurs d’un appareil, car il se peut que ce pilote ait été chargé précédemment lorsqu’un autre appareil a été configuré.
Les pilotes de filtre dans un groupe de filtres ne peuvent pas prédire leur ordre de chargement. Par exemple, si un appareil a trois drivers de filtre supérieur enregistrés, ces trois drivers sont tous chargés après le driver de fonction, mais peuvent être chargés dans n’importe quel ordre dans leur groupe de filtres supérieur.
Si un pilote a une dépendance d’ordre de charge explicite sur un autre pilote, cette dépendance doit être implémentée par le biais d’une relation parent/enfant. Un pilote pour un appareil enfant peut dépendre du chargement des pilotes de l'appareil parent avant le chargement des pilotes enfants.
Pour renforcer l’importance de définir la valeur StartType correcte, la liste suivante décrit comment Windows et le gestionnaire PnP utilisent les entrées StartType dans les fichiers INF :
Au démarrage du système, le chargeur de système d’exploitation charge les pilotes de type SERVICE_BOOT_START avant de transférer le contrôle vers le noyau. Ces pilotes sont en mémoire lorsque le noyau obtient le contrôle.
Les pilotes de démarrage sont chargés avant la configuration de la plupart des appareils. Leur ordre de chargement ne peut donc pas être déterminé par la hiérarchie des appareils. Les pilotes de démarrage peuvent utiliser les entrées Inf LoadOrderGroup pour commander leur chargement. Le système d’exploitation ignore les entrées Dependencies INF pour les pilotes de démarrage.
Le gestionnaire PnP appelle les routines DriverEntry des pilotes SERVICE_BOOT_START afin que les pilotes puissent prendre en charge les périphériques de démarrage.
Si un appareil de démarrage a des appareils enfants, ces appareils sont énumérés. Les périphériques enfants sont configurés et démarrés si leurs pilotes sont également des pilotes de démarrage. Si les pilotes d’un appareil ne sont pas tous des pilotes de démarrage système, le gestionnaire PnP crée un nœud d’appareil (devnode) pour l’appareil, mais ne démarre pas encore l’appareil.
Une fois tous les pilotes de démarrage chargés et les appareils de démarrage démarrés, le gestionnaire PnP configure le reste des appareils PnP et charge leurs pilotes.
Le gestionnaire PnP parcourt l’arborescence des appareils et charge les pilotes pour les devnodes qui ne sont pas encore démarrés (autrement dit, les devnodes non démarrés à l’étape précédente). À mesure que chaque appareil démarre, le gestionnaire PnP énumère les appareils enfants de l’appareil, le cas échéant.
Comme il configure ces appareils, le gestionnaire PnP charge les pilotes pour les appareils, quelles que soient les valeurs StartType des pilotes (sauf quand StartType est SERVICE_DISABLED) avant de continuer à démarrer les appareils. La plupart de ces pilotes sont des pilotes SERVICE_DEMAND_START.
Le gestionnaire PnP ignore les entrées de Registre qui ont été créées à la suite d’entrées INF Dependencies et d’entrées LoadOrderGroup pour les pilotes qu’il charge dans cette étape. L’ordre de chargement est basé sur la hiérarchie des appareils physiques.
À la fin de cette étape, tous les appareils sont configurés, à l’exception des appareils qui ne sont pas énumérables PnP et les descendants de ces appareils. (Les descendants peuvent ou non être énumérables PnP.)
Le gestionnaire PnP charge les pilotes de StartType SERVICE_SYSTEM_START qui ne sont pas encore chargés.
Ces pilotes détectent et signalent leurs appareils non PnP. Le gestionnaire PnP traite les entrées de Registre qui sont le résultat d’entrées INF LoadOrderGroup pour ces pilotes. Il ignore les entrées de Registre qui ont été créées en raison d’entrées INF Dependencies pour ces pilotes.
Le gestionnaire de contrôle de service charge les pilotes de StartType SERVICE_AUTO_START qui ne sont pas encore chargés.
Le gestionnaire de contrôle de service traite les informations de base de données de service en ce qui concerne les valeurs DependOnGroup et DependOnServices des services. Ces informations proviennent des entrées Dependencies dans les entrées INF AddService. N’oubliez pas que les informations de dépendances sont traitées uniquement pour les pilotes non PnP, car les pilotes PnP nécessaires ont été chargés à une étape antérieure du démarrage du système. Le Gestionnaire de contrôle des services ignore les informations INF LoadOrderGroup.
Pour plus d’informations sur le gestionnaire de contrôle de service, consultez la documentation Microsoft Windows SDK.
Utilisation de BootFlags pour promouvoir le startType d’un pilote au démarrage en fonction du scénario de démarrage
Le système d’exploitation peut faire du StartType d'un pilote un pilote de démarrage en fonction de la valeur BootFlags spécifiée dans l’INF du pilote. Vous pouvez spécifier une ou plusieurs des valeurs numériques suivantes (reliées par un OU logique) dans le fichier INF, exprimées sous forme de valeur hexadécimale :
- Si un pilote doit être configuré comme pilote de démarrage au démarrage du réseau, spécifiez 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD).
- Si un pilote doit être promu lors du démarrage à partir d’un disque dur virtuel, spécifiez 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD)
- Si un pilote doit être rendu prioritaire lors du démarrage à partir d’un disque USB, spécifiez 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD).
- Si un pilote doit être promu lors du démarrage à partir du stockage SD, spécifiez 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
- Si un pilote doit être promu lors du démarrage à partir d’un disque sur un contrôleur USB 3.0, spécifiez 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD).
- Si un pilote doit être promu lors du démarrage avec le démarrage mesuré activé, spécifiez 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD).
- Si un pilote doit être promu lors du démarrage avec le démarrage du vérificateur activé, spécifiez 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD).
- Si un pilote doit être promu lors du démarrage WinPE, spécifiez 0x80 (CM_SERVICE_WINPE_BOOT_LOAD).
Pour plus d’informations sur la promotion du StartType d’un pilote lors du démarrage, selon le scénario de démarrage, consultez la directive INF AddService.