標記QueuedIrps 規則 (wdm)
MarkQueuedIrps 規則會指定驅動程式呼叫 IRP 的 IoMarkIrpPending,該 IRP 只有在保留微調鎖定時才需要進一步處理。 只有在驅動程式將 IRP 新增至驅動程式管理的佇列時,才會套用此規則。
具體而言,只有在 發生下列所有 事件時,驅動程式才會違反此規則。
驅動程式會呼叫 KeAcquireSpinLock 或 KeAcquireInStackQueuedSpinLock 以取得微調鎖定。
驅動程式會呼叫下列其中一個例程,將 IRP 新增至驅動程式管理的佇列:
驅動程式會呼叫 KeReleaseSpinLock 或 KeReleaseInStackQueuedSpinLock 以釋放微調鎖定,再呼叫 IoMarkIrpPending。
驅動程式會傳回 IRP STATUS_PENDING的狀態。
驅動程序應該只在保留微調鎖定時,才呼叫佇列 IRP 的 IoMarkIrpPending 。 否則,系統可能會在呼叫 IoMarkIrpPending 之前清除佇列、由另一個驅動程式例程完成、釋放 IRP,因而造成當機。
如需詳細資訊,請參閱 同步處理 IRP 取消。
驅動程式模型:WDM
測試方法
在編譯時期 |
---|
執行 靜態驅動程式驗證器 ,並指定 標記QueuedIrps 規則。 使用下列步驟來執行程式碼的分析:如需詳細資訊,請參閱 使用靜態驅動程式驗證器尋找驅動程式中的瑕疵。 |
適用於
InsertHeadListIoCallDriverIoMarkIrpPendingKeAcquireInStackQueuedSpinLockKeAcquireSpinLockKeInsertByKeyDeviceQueueKeInsertDeviceQueueKeInsertQueueDpcKeReleaseInStackQueuedSpinLockKeReleaseSpinLockPoCallDriverRemoveHeadList