串流迷你驅動程式開發人員可以選擇讓類別驅動程式處理同步。 當迷你驅動程式向類別驅動程式註冊自己時,他們可以將 HW_INITIALIZATION_DATA 的 TurnOffSynchronization 成員設定為 FALSE,以選擇類別驅動程式提供的同步。
當類別驅動程式處理同步處理時,它可確保永遠不會同時執行兩個迷你驅動程式程式碼。 類驅動程式會將所有資料流要求排入佇列,並一次傳遞給小型驅動程式。
此同步處理的其中一個目的是讓迷你驅動程式開發人員不必在多工處理、可重入、多處理器環境中處理驅動程式同步化和請求佇列的所有詳細資訊。 不過,某些迷你驅動程式不應該使用它。 同步處理範例主題中提供兩個範例,說明迷你驅動程式需要執行的同步處理動作。
關閉資料流程類別同步處理表示所有要求都會立即以非同步方式呼叫至PASSIVE_LEVEL提交執行緒內容中的迷你驅動程式。 上述規則的例外狀況是 HwCancelPacket、TimeoutHandler 和 Timer 常式。 這些被稱為DISPATCH_LEVEL。 最後一個值得注意的例外情況是中斷處理程式,它在 DIRQL 被調用。
當同步處理關閉時,迷你驅動程式會負責執行符合 WDM 模型的同步處理。 如果迷你驅動程式在PASSIVE_LEVEL回呼,則任何較高的 IRQL 事件都可以先占它,例如 DPC 或中斷。 同樣地,如果迷你驅動程式在 DISPATCH_LEVEL 回呼,它可能會隨後被中斷所中斷。 操作共用資源的迷你驅動程式函式必須同步處理存取。
當串流類別同步化關閉時,可以同時向相同或不同的串流發出多個要求。 迷你驅動程式必須將自己的要求排入佇列,並處理與其他執行緒和 ISR 的任何硬體同步處理。 自旋鎖、互斥鎖和 KeSynchronizeExecution 是一些可供執行不使用串流類別同步處理的串流迷你驅動程式的同步處理物件。