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