Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте мьютекс устройства для синхронизации объектов в иерархии с устройства до фильтров. Каждое устройство AVStream имеет единственный, связанный с ним, мьютекс. Создание и уничтожение как фабрик фильтров, так и самих фильтров синхронизированы с этим мьютексом. Некоторые операции Plug and Play и управления питанием также синхронизированы с этим мьютексом. Мини-драйвер фокусируется на двух основных проблемах, связанных с мьютексом устройства.
Иерархия объектов гарантированно стабильна только от устройства до отдельных фильтров, если мьютекс устройства удерживается. В результате миникодрайвер должен получить мьютекс устройства перед тем, как вручную создать фабрики фильтров, вызывая KsCreateFilterFactory. Минидрайвер должен получить мьютекс устройства перед обходом иерархии объектов, вызовом функций KsXxxGetFirstChildXxx и KsXxxGetNextSiblingXxx.
AVStream удерживает мьютекс устройства от имени минидрайвера, когда получает следующие запросы:
Уведомления о режиме сна и пробуждении для фильтров и пинов. См. раздел KsFilterRegisterPowerCallbacks и KsPinRegisterPowerCallbacks.
Важно отметить, что мьютекс устройства не может быть получен рекурсивно. Рассмотрим следующий пример. AVStream получает уведомление о спящем режиме. Как описано выше, он захватывает мьютекс устройства от имени минидрайвера. Если AVStream вызывает предоставленную минидрайвером подпрограмму обратного вызова в контексте потока A, минидрайвер не должен впоследствии пытаться получить мьютекс устройства в потоке А. Это приводит к блокировке потока A.
AVStream часто получает мьютексы управляющих фильтров, в то время как мьютекс устройства уже удерживается. Следовательно, в качестве общего правила поток, который принял мьютекс элемента управления фильтра, не должен впоследствии принимать мьютекс устройства.
Для управления мьютексом устройства используйте следующие функции: