Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use o mutex do dispositivo para sincronizar objetos na hierarquia do dispositivo até os filtros. Cada dispositivo AVStream tem um único mutex de dispositivo associado. A criação e a destruição de fábricas de filtros e filtros são sincronizadas com esse mutex. Determinadas operações de Plug and Play e gerenciamento de energia também são sincronizadas com esse mutex. O minidriver se concentra em dois aspectos principais em relação ao mutex do dispositivo.
A hierarquia de objetos é garantida como estável somente do dispositivo até filtros individuais se o mutex do dispositivo estiver ativo. Como resultado, o minidriver deve obter o mutex do dispositivo antes de criar fábricas de filtro manualmente chamando KsCreateFilterFactory. O minidriver também deve obter o mutex do dispositivo antes de percorrer a hierarquia de objetos chamando as funções KsXxxGetFirstChildXxx e KsXxxGetNextSiblingXxx.
O AVStream controla o mutex do dispositivo em nome do minidriver ao receber as seguintes solicitações:
Notificações de suspensão e ativação em filtros e pinos. Consulte KsFilterRegisterPowerCallbacks e KsPinRegisterPowerCallbacks.
É importante observar que o mutex do dispositivo não pode ser obtido recursivamente. Considere o exemplo a seguir. O AVStream recebe uma notificação de suspensão. Conforme descrito acima, ele usa o mutex do dispositivo em nome do minidriver. Se o AVStream chamar uma rotina de retorno de chamada fornecida pelo minidriver no contexto da thread A, o minidriver não deverá, posteriormente, tentar obter o mutex do dispositivo na thread A. Fazer isso fará com que a thread A entre em deadlock consigo mesma.
O AVStream geralmente obtém mutexes de controle de filtro enquanto o mutex do dispositivo já está mantido. Consequentemente, como regra geral, um thread que tenha tomado um mutex de controle de filtro não deve, posteriormente, usar o mutex do dispositivo.
Para manipular o mutex do dispositivo, use as seguintes funções: