使用裝置 Mutex 來同步樹狀結構中的物件,從裝置依序向下到篩選器。 每個AVStream裝置都有單一相關聯的裝置 Mutex。 篩選處理站和篩選的建立和銷毀都會與這個 Mutex 同步處理。 某些隨插即用和電源管理作業也會與這個 Mutex 同步處理。 minidriver 著重於裝置 Mutex 的兩個主要問題。
如果保留裝置 Mutex,物件階層保證 只能 從裝置穩定到個別篩選。 因此,minidriver 必須先取得裝置 Mutex,才能藉由呼叫 KsCreateFilterFactory 手動建立篩選處理站。 minidriver 也必須在周遊物件階層之前先取得裝置的 Mutex,方法是呼叫 KsXxxGetFirstChildXxx 和 KsXxxGetNextSiblingXxx 函式。
AVStream 會在收到下列要求時,代表 minidriver 保留裝置 Mutex:
篩選和釘選上的睡眠和喚醒通知。 請參閱 KsFilterRegisterPowerCallbacks 和 KsPinRegisterPowerCallbacks。
請務必注意,裝置的 mutex 無法以遞歸方式取得。 請考慮下列範例。 AVStream 會收到睡眠通知。 如上所述,它會代表迷你驅動程式取得裝置 Mutex。 如果 AVStream 然後在執行緒 A 的上下文中呼叫 minidriver 提供的回呼例程,minidriver 接著不得嘗試在執行緒 A 中取得裝置 mutex。這樣做會導致執行緒 A 自行死結。
AVStream 通常會在裝置 Mutex 已保留時取得篩選控件 Mutex。 因此,一般規則是,採用篩選控件 Mutex 的線程不應該後續採用裝置 Mutex。
要操作裝置互斥鎖,請使用下列函式: