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.
La plupart des routines de gestion des pilotes sont appelées dans un contexte de thread arbitraire à IRQL = PASSIVE_LEVEL, avec les exceptions suivantes :
Toutes les routines de répartition du pilote de niveau supérieur sont appelées dans le contexte du thread qui a généré la requête d’E/S, qui est généralement un thread d’application en mode utilisateur.
En d’autres termes, les routines de dispatch des pilotes de système de fichiers et d’autres pilotes de niveau supérieur sont appelées dans un contexte de thread non arbitraire à IRQL = PASSIVE_LEVEL.
Les routines DispatchRead, DispatchWrite et DispatchDeviceControl des pilotes de périphérique de niveau le plus bas et des pilotes intermédiaires superposés au-dessus de ces pilotes dans le chemin de pagination du système peuvent être appelées à IRQL = APC_LEVEL et dans un contexte de thread arbitraire.
Les routines DispatchRead et/ou DispatchWrite , ainsi que toute autre routine qui traite également les demandes de lecture et/ou d’écriture dans un périphérique ou un pilote intermédiaire de niveau le plus bas, doivent être résidentes à tout moment. Ces routines de pilote ne peuvent pas être paginables ni appartenir à la section pageable d’un pilote ; elles ne doivent pas accéder à une mémoire paginable. En outre, ils ne doivent pas dépendre des appels bloquants (tels que KeWaitForSingleObject avec un délai d’attente différent de zéro).
La routine DispatchPower des pilotes dans les chemins d’hibernation et/ou de pagination peut être appelée à IRQL = DISPATCH_LEVEL. Les routines DispatchPnP de ces pilotes doivent être prêtes à gérer les requêtes pnP IRP_MN_DEVICE_USAGE_NOTIFICATION .
La routine DispatchPower des pilotes qui nécessitent une puissance d’inrush au démarrage peut être appelée à IRQL = DISPATCH_LEVEL.
Les routines DispatchPower, DispatchRead, DispatchWrite, DispatchDeviceControl et DispatchInternalDeviceControl peuvent toutes être appelées à IRQL <= DISPATCH_LEVEL.
Pour plus d’informations, consultez Gestion des priorités matérielles.