Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Правило MarkingQueuedIrps указывает, что драйвер вызывает IoMarkIrpPending для IRP, который требует дальнейшей обработки только при удержании спиновой блокировки. Это правило применяется только в том случае, если драйвер добавляет IRP в очередь, управляемую драйвером.
В частности, драйвер нарушает это правило только в том случае, если происходят все перечисленные ниже события.
Драйвер вызывает KeAcquireSpinLock или KeAcquireInStackQueuedSpinLock , чтобы получить спиновую блокировку.
Драйвер вызывает одну из следующих процедур, чтобы добавить IRP в управляемую драйвером очередь:
Драйвер вызывает KeReleaseSpinLock или KeReleaseInStackQueuedSpinLock , чтобы освободить спиновую блокировку перед вызовом IoMarkIrpPending.
Драйвер возвращает состояние STATUS_PENDING для IRP.
Драйверы должны вызывать IoMarkIrpPending для очереди IRP только при удержании спин-блокировки. В противном случае IRP может быть выведен из очереди, завершен другой подпрограммой драйвера и освобожден системой до вызова IoMarkIrpPending , что приведет к сбою.
Дополнительные сведения см. в разделе Синхронизация отмены IRP.
Модель драйвера: WDM
Как тестировать
Во время компиляции |
---|
Запустите средство проверки статических драйверов и укажите правило MarkingQueuedIrps . Чтобы выполнить анализ кода, выполните следующие действия.
Дополнительные сведения см. в статье Использование средства проверки статических драйверов для поиска дефектов в драйверах. |
Применяется к
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList