MarkingQueuedIrps ルール (wdm)
MarkingQueuedIrps ルールは、ドライバーが IoMarkIrpPending スピン ロックを保持している間だけ、さらに処理を必要とする IRP を呼び出すよう指定します。 このルールは、ドライバーがドライバー管理のキューに IRP を追加する場合にのみ適用されます。
具体的には、ドライバーは、次の すべての イベントが発生した場合にのみ、この規則に違反します。
ドライバーは、 KeAcquireSpinLock または KeAcquireInStackQueuedSpinLock を呼び出してスピン ロックを取得します。
ドライバーは、ドライバーで管理されるキューに IRP を追加する次のルーチンのいずれかを呼び出します。
ドライバーは、 KeReleaseSpinLock または KeReleaseInStackQueuedSpinLock を呼び出して、 IoMarkIrpPending を呼び出す前にスピン ロックを解放します。
ドライバーは、IRP のSTATUS_PENDINGの状態を返します。
ドライバーは、スピン ロックを保持している間にのみ、キューに登録された IRP の IoMarkIrpPending を呼び出す必要があります。 そうしないと、IRP がデキューされ、別のドライバー ルーチンによって完了され、 IoMarkIrpPending の呼び出しが発生する前にシステムによって解放され、クラッシュが発生する可能性があります。
詳細については、 「IRP キャンセルの同期」を参照してください。
ドライバーモデル: WDM
テスト方法
コンパイル時 |
---|
静的ドライバー検証ツール を実行し、 MarkingQueuedIrps 規則を指定します。 コードの分析を実行するには、次の手順に従います。詳細については、 「静的ドライバー検証ツールを使用してドライバー の欠陥を見つける」を参照してください。 |
適用対象
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList