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 routines Dispatch d'un pilote pour les requêtes IRP_MJ_CREATE et IRP_MJ_CLOSE peuvent simplement se contenter de compléter l'IRP avec STATUS_SUCCESS. Pour plus d’informations, consultez Compléter les IRPs.
Les routines Dispatch d’un autre pilote pour IRP_MJ_CREATE et les demandes de IRP_MJ_CLOSE peuvent effectuer plus de travail, en fonction du pilote de périphérique sous-jacent ou de l’appareil sous-jacent. Tenez compte des scénarios suivants :
Lors de la réception d’une demande de création, un pilote de classe peut initialiser une file d’attente interne et envoyer une demande de IRP_MJ_INTERNAL_DEVICE_CONTROL au pilote de port correspondant demandant des informations de configuration de périphérique ou un accès exclusif à un port de contrôleur.
La réception de IRP_MJ_CLOSE indique que la dernière référence à l’objet de fichier associé à l’objet d’appareil cible a été supprimée. Cela implique que tous les handles de l’objet de fichier ont été fermés et que toutes les demandes d’E/S en attente ont été terminées ou annulées.
Lors de la réception d’une demande de création, un pilote d’un appareil rarement utilisé peut appeler MmLockPagableCodeSection pour rendre résident certaines des routines de pilotes qui traitent d’autres requêtes IRP_MJ_XXX . Lors de la réception d'une requête de fermeture réciproque, le pilote peut appeler MmUnlockPagableImageSection pour conserver la mémoire système en pageant sa section d'image paginable lorsque tous les descripteurs d'objet de fichier pour les objets de périphérique de ce pilote sont fermés.
Certains pilotes gèrent les requêtes IRP_MJ_CLOSE uniquement pour des raisons de symétrie, car, après l'ouverture de leurs objets de périphérique par un sous-système protégé ou un pilote de niveau supérieur, les objets de périphérique des pilotes de niveau inférieur ne sont pas fermés tant que le système lui-même n'est pas arrêté. Par exemple, les pilotes clavier et souris configurent des objets d’appareil représentant des appareils physiques qui doivent être fonctionnels pendant l’exécution du système, de sorte que ces pilotes peuvent avoir des routines DispatchClose minimales pour la symétrie, ou avoir combiné des routines DispatchCreateClose .
Si l’appareil contrôlé par un pilote de niveau inférieur doit être disponible pour que le système continue à fonctionner, la routine DispatchClose du pilote ne sera généralement pas appelée. Par exemple, certains des pilotes de disque système n’ont pas de routine DispatchClose , mais ces pilotes ont généralement des routines DispatchFlushBuffers et DispatchShutdown pour effectuer les opérations d’E/S de fichiers en attente avant l’arrêt du système.
Bien que vous puissiez implémenter des routines DRIVER_DISPATCH et DispatchClose distinctes, les pilotes ont parfois une routine DispatchCreateClose unique pour gérer les demandes de création et de fermeture.