Mutex Perangkat di AVStream

Gunakan mutex perangkat untuk menyinkronkan objek dalam hierarki dari perangkat ke filter. Setiap perangkat AVStream memiliki satu mutex perangkat terkait. Pembuatan dan penghancuran pabrik filter dan filter disinkronkan dengan mutex ini. Operasi Plug and Play dan manajemen daya tertentu juga disinkronkan dengan mutex ini. Minidriver berfokus pada dua masalah utama sehubungan dengan mutex perangkat.

Hierarki objek dijamin stabil hanya dari perangkat ke filter individual jika mutex perangkat ditahan. Akibatnya, minidriver harus mendapatkan mutex perangkat sebelum membuat pabrik filter secara manual dengan memanggil KsCreateFilterFactory. Minidriver juga harus mendapatkan mutex perangkat sebelum melintasi hierarki objek dengan memanggil fungsi KsXxxGetFirstChildXxx dan KsXxxGetNextSiblingXxx .

AVStream memegang mutex perangkat atas nama minidriver saat menerima permintaan berikut:

Penting untuk dicatat bahwa mutex perangkat tidak dapat diperoleh secara rekursif. Pertimbangkan contoh berikut. AVStream menerima pemberitahuan tidur. Seperti yang dijelaskan di atas, dibutuhkan mutex perangkat atas nama minidriver. Jika AVStream kemudian memanggil rutinitas panggilan balik yang disediakan minidriver dalam konteks utas A, minidriver tidak boleh mencoba mendapatkan mutex perangkat di utas A. Melakukannya menyebabkan utas A mengalami kebuntuan dengan sendirinya.

AVStream sering mendapatkan mutex kontrol filter saat mutex perangkat sudah ditahan. Akibatnya, sebagai aturan umum, utas yang telah mengambil mutex kontrol filter kemudian tidak boleh mengambil mutex perangkat.

Untuk memanipulasi mutex perangkat, gunakan fungsi berikut:

KsAcquireDevice, KsReleaseDevice