Partilhar via


Bloqueando e desbloqueando ponteiros de fluxo

Cada ponteiro de fluxo mantém um status de bloqueio: bloqueado ou desbloqueado.

Os ponteiros de fluxo bloqueados têm a garantia de fazer referência aos dados na fila. Os quadros de dados apontados por ponteiros de fluxo bloqueados não podem ser cancelados. Como tal, os minidrivers devem minimizar o tempo que gastam segurando ponteiros de fluxo bloqueados.

Não é garantido que um ponteiro de fluxo desbloqueado faça referência a um quadro de dados dentro da fila. Ao manter um ponteiro de fluxo desbloqueado, um minidriver pode reter um ponteiro de dados, mas ainda permitir que o frame seja cancelado.

É possível aceder aos dados apontados por um ponteiro de fluxo desbloqueado. Se a rotina CancelCallback fornecida no KsStreamPointerClone chamar KsStreamPointerDelete, você deverá sincronizar CancelCallback e qualquer acesso a dados que ele executar. O minidriver deve garantir que a rotina de retorno de chamada de cancelamento não exclua o ponteiro de fluxo enquanto outro thread estiver usando-o.

Se a rotina de retorno de chamada de cancelamento não chamar KsStreamPointerDelete, a sincronização pode não ser necessária.

Para bloquear um ponteiro de fluxo, chame KsStreamPointerLock. Para desbloquear um ponteiro de fluxo, chame KsStreamPointerUnlock.

Quando um IRP é cancelado, o AVStream chama os retornos de chamada de cancelamento para todos os ponteiros de fluxo desbloqueados que apontam para quadros dentro do IRP.

Desbloqueie os ponteiros de fluxo de borda inicial e final somente quando não estiverem em uso.