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.
Cada instância de filtro do AVStream possui um mutex associado para controle do filtro. Esse mutex é usado para sincronizar o acesso à hierarquia de objetos do filtro até os pinos individuais. A criação e a destruição de filtros e pinos são sincronizados com esse mutex.
A hierarquia de objetos é garantida como estável somente de uma instância de filtro específica para baixo enquanto o mutex de controle de filtro é mantido. Assim, o minidriver deve obter o mutex de controle do filtro antes de percorrer a hierarquia de objetos abaixo do nível de filtro usando as funções KsXxxGetFirstChildXxx e KsXxxGetNextSiblingXxx.
O mutex de controle de filtro também é usado para sincronizar transições de estado.
AVStream obtém o mutex de controle de filtro quando manipula propriedades que exigem que a hierarquia permaneça estável, como ao executar a modificação do descritor.
Lembre-se de que um mutex de controle de filtro único é utilizado para a hierarquia de objetos sob cada filtro individual. Isso significa que um objeto de pin usa o mutex do controle de filtro do pai quando um minidriver chama uma função com esse objeto de pin.
O AVStream mantém o mutex de controle do filtro em nome do minidriver ao chamar as seguintes rotinas fornecidas pelo próprio minidriver:
Semelhante ao mutex do dispositivo, o mutex de controle de filtro não deve ser obtido recursivamente. Se, por exemplo, o AVStream fizer um retorno de chamada para um minidriver para um despacho Create no contexto do thread A, e o minidriver tentar obter o mutex de dentro do thread A, o thread A entra em deadlock consigo mesmo.
Um deadlock poderá ocorrer se você executar uma das seguintes ações:
Tente adquirir o mutex do controle de filtro dentro da rotina do processo.
Tente obter o mutex de controle de filtro de dentro do retorno de chamada de suspensão ou ativação.
Para manipular o mutex de controle de filtro, use as seguintes funções:
KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl