Règle MarkingQueuedIrps (wdm)
La règle MarkingQueuedIrps spécifie que le pilote appelle IoMarkIrpPending pour un IRP qui nécessite un traitement supplémentaire uniquement en tenant un verrou de rotation. Cette règle s’applique uniquement lorsque le pilote ajoute l’IRP à une file d’attente gérée par le pilote.
Plus précisément, le pilote enfreint cette règle uniquement lorsque tous les événements suivants se produisent.
Le pilote appelle KeAcquireSpinLock ou KeAcquireInStackQueuedSpinLock pour acquérir un verrou de rotation.
Le pilote appelle l’une des routines suivantes pour ajouter un IRP à une file d’attente gérée par le pilote :
Le pilote appelle KeReleaseSpinLock ou KeReleaseInStackQueuedSpinLock pour libérer le verrou de rotation avant d’appeler IoMarkIrpPending.
Le pilote retourne une status de STATUS_PENDING pour l’IRP.
Les pilotes doivent appeler IoMarkIrpPending pour un IRP en file d’attente uniquement en tenant un verrou de rotation. Sinon, un IRP pourrait être mis en file d’attente, terminé par une autre routine de pilote et libéré par le système avant que l’appel à IoMarkIrpPending se produise, provoquant ainsi un plantage.
Pour plus d’informations, consultez Synchronisation de l’annulation D’IRP.
Modèle de pilote : WDM
Comment tester
Au moment de la compilation |
---|
Exécutez Static Driver Verifier et spécifiez la règle MarkingQueuedIrps . Utilisez les étapes suivantes pour exécuter l’analyse de votre code :
Pour plus d’informations, consultez Utilisation du vérificateur de pilote statique pour rechercher des défauts dans les pilotes. |
S’applique à
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueue KeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList