Regola MarkingQueuedIrps (wdm)
La regola MarkQueuedIrps specifica che il driver chiama IoMarkIrpPending per un'IRP che richiede un'ulteriore elaborazione solo mantenendo un blocco di rotazione. Questa regola si applica solo quando il driver aggiunge l'IRP a una coda gestita da driver.
In particolare, il driver viola questa regola solo quando si verificano tutti gli eventi seguenti.
Il driver chiama KeAcquireSpinLock o KeAcquireInStackQueuedSpinLock per acquisire un blocco spin.
Il driver chiama una delle routine seguenti per aggiungere un'IRP a una coda gestita dal driver:
Il driver chiama KeReleaseSpinLock o KeReleaseInStackQueuedSpinLock per rilasciare il blocco spin prima di chiama IoMarkIrpPending.
Il driver restituisce uno stato di STATUS_PENDING per l'IRP.
I driver devono chiamare IoMarkIrpPending solo per un IRP accodato mentre mantiene un blocco di rotazione. In caso contrario, un'IRP potrebbe essere dequeued, completata da un'altra routine driver e liberata dal sistema prima che la chiamata a IoMarkIrpPending si verifichi, causando così un arresto anomalo.
Per altre informazioni, vedere Sincronizzazione dell'annullamento di IRP.
Modello di driver: WDM
Come eseguire il test
In fase di compilazione |
---|
Eseguire il verifica driver statico e specificare la regola MarkingQueuedIrps . Usa i passaggi descritti di seguito per eseguire un'analisi del codice:
Per altre informazioni, vedere Uso del verificatore driver statico per trovare i difetti nei driver. |
Si applica a
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueue KeInsertDeviceQueue KeInsertQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList