共用方式為


Minidriver 同步處理

串流迷你驅動程式開發人員可以選擇允許類別驅動程式處理同步處理。 當 minidrivers 向類別驅動程式註冊自己時,可以藉由將HW_INITIALIZATION_DATATurnOffSynchronization成員設定為FALSE,來選擇類別驅動程式提供的同步處理。

當類別驅動程式處理同步處理時,它可確保永遠不會同時執行兩個迷你驅動程式程式碼片段。 類別驅動程式會將所有資料流程要求排入佇列,並一次將它們傳遞至迷你驅動程式。

此同步處理的其中一個目的是要讓 minidriver 寫入器不必處理驅動程式同步處理的所有詳細資料,以及在多工、重新進入、多處理器環境中要求佇列。 不過,某些迷你驅動程式不應該使用它。 同步處理 範例 主題中提供兩個範例,說明迷你驅動程式在同步處理方面需要執行的動作。

關閉資料流程類別同步處理表示所有要求都會立即和非同步呼叫至提交執行緒內容中的 minidriver,PASSIVE_LEVEL。 上述規則的例外狀況是 HwCancelPacket、TimeoutHandler 和 Timer 常式。 這些會在DISPATCH_LEVEL呼叫。 最後一個例外狀況是在 DIRQL 呼叫的中斷處理常式。

當同步處理關閉時,minidriver 會負責執行與 WDM 模型相符的同步處理。 如果 minidriver 在PASSIVE_LEVEL回呼叫,它就可以被任何較高的 IRQL 事件先占,例如 DPC 或中斷。 同樣地,如果迷你驅動程式在DISPATCH_LEVEL回呼叫,則後續可能會因為中斷而先占。 操作共用資源的 Minidriver 函式必須同步存取。

當資料流程類別同步處理關閉時,可以同時對相同或不同的資料流程發出多個要求。 minidriver 必須將自己的要求排入佇列,並處理與其他執行緒和 ISR 的任何硬體同步處理。 微調鎖定、Mutex 和 KeSynchronizeExecution 是一些同步處理物件,可用來串流執行迷你驅動程式,而不需要串流類別同步處理。