Partilhar via


Introdução a Ponteiros de Fluxo

No modelo de classe de fluxo mais antigo, o minidriver é responsável por manter suas próprias filas de bloco de solicitação de fluxo de dados (SRB). O AVStream fornece esta funcionalidade através da abstração de fluxo de ponteiros. Um ponteiro de fluxo é uma referência a um quadro de dados AVStream específico.

Minidrivers que usam processamento centrado em pinos (a maioria dos drivers de hardware), usam ponteiros de fluxo para gerenciar filas de pinos. Cada pino tem uma fila independente de buffers de dados. Quando um pacote de dados chega ao pino (seja um pedido de leitura ou de escrita), o AVStream adiciona o pacote à fila e pode chamar o despacho de processo do pino.

Minidrivers que usam processamento centrado em filtro não devem usar ponteiros de fluxo (stream pointers) diretamente. Consulte Processamento centrado em filtros para obter mais informações.

Por padrão, cada fila tem um ponteiro de fluxo líder. Opcionalmente, ele pode ter um ponteiro de fluxo de borda à direita se o sinalizador de borda à direita for especificado. O minidriver pode criar novos ponteiros de fluxo ao chamar a função KsStreamPointerClone.

Você pode mover um ponteiro de fluxo em uma única direção: para um quadro mais recente. Isso é chamado de avanço do apontador do fluxo.

Avançando um ponteiro de fluxo

Ao avançar um ponteiro de fluxo, você o move para um quadro mais recente ou avança algum número de bytes dentro do quadro atual. Por exemplo, o minidriver pode avançar um ponteiro de fluxo desde a chegada do primeiro quadro até à chegada do segundo quadro.

Para avançar um ponteiro de fluxo, um filtro centrado em pinos pode chamar KsStreamPointerAdvance ou KsStreamPointerUnlock com o parâmetro Eject definido como TRUE.

Contagens de referência de quadro

Os quadros com ponteiros de fluxo apontando para eles são contados de referência, assim como os quadros que estão na janela entre as bordas à esquerda e à direita.

Quando um minidriver termina com um ponteiro de fluxo, ele pode, opcionalmente, chamar KsStreamPointerSetStatusCode para especificar um código de erro com o qual concluir o pacote de solicitação de E/S (IRP) fornecido. O minidriver deve então chamar KsStreamPointerDelete. Em seguida, o AVStream diminui a contagem de referência no quadro que o ponteiro de fluxo excluído fez referência anteriormente. Os ponteiros de fluxo de borda dianteira e de borda inferior não podem ser excluídos.