Gestion du démarrage PnP dans un pilote de classe de stockage
Un pilote de classe de stockage effectue une initialisation spécifique au périphérique lorsque le gestionnaire PnP appelle la routine DispatchPnP du pilote de classe avec une demande de démarrage (IRP_MJ_PNP avec IRP_MN_START_DEVICE). La routine DispatchPnP du pilote de classe de stockage appelle une routine StartDevice interne ou implémente la même fonctionnalité en ligne. Étant donné que les demandes de démarrage envoyées à un FDO doivent être gérées en premier par le pilote le plus bas de la pile, la routine DispatchPnP du pilote de la classe de stockage transfère la demande au pilote inférieur suivant avec IoCallDriver avant d’appeler StartDevice. Si la demande a été envoyée à un AOP, le pilote n’a pas besoin de transférer la demande avant de la gérer.
La routine StartDevice interne d’un pilote de classe de stockage configure l’extension de l’appareil de son FDO avec des données déterminées par le pilote pour gérer les demandes d’E/S pour l’appareil. Pour plus d’informations, consultez Configuration de l’extension de périphérique d’un pilote de classe de stockage.
Une routine StartDevice doit activer toutes les interfaces d’appareil que le pilote a inscrites dans sa routine AddDevice . (Voir Classes d’interface d’appareil.) Il peut également créer un lien symbolique pour son objet d’appareil.
Une fois le démarrage de l’appareil inférieur terminé, le pilote peut supposer que l’appareil est à l’état d’alimentation D0 (entièrement activé et opérationnel) dans la plupart des cas. Si l’appareil n’est pas complètement sous tension, le pilote de port met en file d’attente les demandes jusqu’à ce que l’appareil soit prêt. Toutefois, si la routine StartDevice du pilote doit effectuer des opérations qui nécessitent un courant d’inrush (par exemple, pour faire tourner un lecteur de disque), le pilote doit envoyer une demande d’alimentation D0 au pilote inférieur suivant avant d’effectuer l’opération.
Un pilote d’un appareil de type FILE_DEVICE_DISK ou FILE_DEVICE_MASS_STORAGE peut s’inscrire à la détection d’inactivité et utiliser les délais d’expiration de la stratégie d’alimentation standard pour la classe d’appareil en spécifiant des valeurs de conservation et de délai d’expiration des performances de -1 dans son appel PoRegisterDeviceforIdleDetection .
Pour plus d’informations sur la routine DispatchPnP d’un pilote de classe de stockage, consultez Gestion des demandes PnP adressées aux périphériques de stockage. Pour plus d’informations sur la gestion des demandes de démarrage PnP, consultez Démarrage d’un appareil.