AVStream 中的裝置 Mutex

使用裝置 Mutex 將階層中的物件從裝置向下同步處理到篩選。 每個 AVStream 裝置都有一個相關聯的裝置 Mutex。 篩選處理站和篩選的建立和解構都會與這個 Mutex 同步處理。 某些隨插即用和電源管理作業也會與此 Mutex 同步處理。 minidriver 著重于裝置 Mutex 的兩個主要問題。

只有在保留裝置 Mutex 時,物件階層才能從裝置向下穩定到個別篩選。 因此,minidriver 必須先取得裝置 Mutex,才能藉由呼叫 KsCreateFilterFactory手動建立篩選處理站。 minidriver 也必須在呼叫 KsXxxGetFirstChildXxxKsXxxGetNextSiblingXxx 函式,以周遊物件階層之前取得裝置 Mutex。

AVStream 會在收到下列要求時代表 minidriver 保存裝置 Mutex:

請務必注意,裝置 Mutex 無法以遞迴方式取得。 請思考一下下列範例。 AVStream 會收到睡眠通知。 如上所述,它會代表 minidriver 採用裝置 Mutex。 如果 AVStream 接著線上程 A 的內容中呼叫 minidriver 提供的回呼常式,minidriver 之後不得嘗試線上程 A 中取得裝置 Mutex。這麼做會導致執行緒 A 自行死結。

AVStream 通常會在裝置 Mutex 保留時取得篩選控制項 Mutex。 因此,一般規則是已採用篩選控制項 Mutex 的執行緒不應後續採用裝置 Mutex。

若要操作裝置 Mutex,請使用下列函式:

KsAcquireDeviceKsReleaseDevice