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.
Les pilotes peuvent inclure les routines de répartition suivantes :
-
IRP_MJ_CLEANUP indique que le dernier handle d’un objet de fichier associé à l’objet d’appareil cible est fermé. Les demandes d’E/S en attente pour l’objet de fichier peuvent toujours exister. Les pilotes peuvent implémenter une routine DispatchCleanup pour effectuer un nettoyage qui n’est pas spécifique à un handle de fichier particulier. Les pilotes peuvent également utiliser leur routine DispatchClose à la même fin.
DispatchQueryInformation, DispatchSetInformation
Certains pilotes de niveau supérieur pourraient devoir traiter des IRPs IRP_MJ_QUERY_INFORMATION et IRP_MJ_SET_INFORMATION. Ces demandes indiquent qu’une application en mode utilisateur, un composant en mode noyau ou un pilote a demandé des informations sur la longueur de l’objet de fichier (représentant l’objet de périphérique du pilote) pour laquelle le demandeur en mode utilisateur a un handle, ou que le demandeur en mode utilisateur tente de définir une fin de fichier sur cet objet de fichier.
Les pilotes de périphériques parallèles et de classe série gèrent ces requêtes en définissant la FILE_STANDARD_INFORMATION ou FILE_POSITION_INFORMATION longueur ou position sur zéro. D’autres pilotes de périphérique de niveau supérieur doivent prendre en charge ces requêtes, en particulier si une application en mode utilisateur ou un pilote en mode noyau peut appeler des fonctions runtime C pour manipuler l’objet de fichier. Les pilotes de système de fichiers doivent prendre en charge ces requêtes plus complètement que ces pilotes de périphérique de niveau supérieur.
-
Un pilote qui met en cache les données sur un appareil ou qui stocke les données dans des mémoires tampons internes allouées par le pilote peut recevoir IRP_MJ_FLUSH_BUFFERS. La réception de cette demande indique que le pilote doit écrire ses données mises en mémoire tampon ou vider les données mises en cache sur l’appareil, ou ignorer les données mises en mémoire tampon ou mises en cache lues à partir de l’appareil.
Par exemple, les pilotes de classe pour le clavier et la souris du système, qui comportent des mémoires tampons en anneau internes pour les données d’entrée de leurs périphériques, prennent en charge la commande de vidage. Les pilotes des périphériques de stockage en masse et ceux situés au-dessus prennent également en charge cette requête.
-
Tout pilote susceptible d’être appelé avant l’arrêt du système doit gérer IRP_MJ_SHUTDOWN. La routine DispatchShutdown doit effectuer le nettoyage déterminé par le pilote avant que le gestionnaire d’alimentation envoie un IRP d’alimentation définie par le système pour arrêter le système. Un pilote peut appeler IoRegisterShutdownNotification ou IoRegisterLastChanceShutdownNotification pour s’inscrire à la notification d’arrêt.
Les pilotes de stockage en masse et les pilotes intermédiaires superposés à ceux-ci peuvent s'appuyer sur un pilote de système de fichiers de niveau supérieur pour leur envoyer des IRPs d'arrêt lorsque le système est sur le point de s'arrêter. Autrement dit, le FSD est chargé de s’assurer que toutes les données de fichier mises en cache sont écrites sur des périphériques, en appelant les pilotes sous-jacents pour vider les données de leurs caches d’appareils ou mémoires tampons (le cas échéant), et ainsi de suite avant l’arrêt du système.
Le pilote d’un périphérique de stockage en masse qui met en cache les données en interne doit fournir des routines DispatchShutdown et DispatchFlushBuffers . Si un pilote de stockage en masse met en mémoire des données, mais que son appareil n’a pas de cache interne, il doit également fournir des routines DispatchShutdown et DispatchFlushBuffers .
Tous les pilotes intermédiaires superposés au-dessus d’un pilote qui gère les requêtes IRP_MJ_FLUSH_BUFFERS et IRP_MJ_SHUTDOWN fournissent également des routines DispatchShutdown et DispatchFlushBuffers .