Compartilhar via


Bloquear e desbloquear ponteiros de fluxo

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

Ponteiros de fluxo bloqueados são garantidos para referenciar dados na fila. Quadros de dados apontados por ponteiros de fluxo bloqueados não podem ser cancelados. Dessa forma, os minidrivers devem minimizar o tempo que passam mantendo ponteiros de fluxo bloqueados.

Não há garantia de que um ponteiro de fluxo desbloqueado faça referência a um quadro de dados dentro da fila. Mantendo um ponteiro de fluxo desbloqueado, um minidriver pode reter um ponteiro de dados, mas ainda permitir que o quadro seja cancelado.

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

Se a rotina de retorno de chamada de cancelamento não chamar KsStreamPointerDelete, a sincronização poderá 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 à esquerda e à direita somente quando eles não estiverem em uso.