Compartilhar via


AVCSTRM_ABORT_STREAMING

O código da função AVCSTRM_ABORT_STREAMING cancela todas as solicitações de dados pendentes e libera os recursos usados.

Bloco de Status de E/S

Se tiver êxito, avcstrm.sysdefinirá Irp-IoStatus.Status> como STATUS_SUCCESS.

Os possíveis valores retornados por erro incluem:

Status do erro Descrição
STATUS_DEVICE_REMOVED O dispositivo correspondente à operação de AVCSTRM_READ não existe mais.
STATUS_CANCELLED A solicitação não pôde ser concluída.
STATUS_INVALID_PARAMETER Um parâmetro especificado no IRP está incorreto,
STATUS_INSUFFICIENT_RESOURCES Não havia recursos suficientes do sistema para concluir a solicitação.
STATUS_PENDING A solicitação foi recebida, mas requer processamento adicional. A rotina de conclusão de E/S lidará com a resposta final.

Entrada AVC_STREAM_REQUEST_BLOCK

SizeOfThisBlock, Versão e Função
Use a macro INIT_AVCSTRM_HEADER para inicializar esses membros. Passe AVCSTRM_ABORT_STREAMING no argumento Solicitação da macro.

AVCStreamContext
Especifica o contexto de fluxo (identificador) retornado por uma chamada de AVCSTRM_OPEN anterior que é o destino para a operação de gravação de dados.

Um driver de subunidade deve primeiro alocar um IRP e uma estrutura AVC_STREAM_REQUEST_BLOCK .

Em seguida, ele deve usar a macro INIT_AVCSTRM_HEADER para inicializar a estrutura AVC_STREAM_REQUEST_BLOCK, passando AVCSTRM_READ como o argumento Request para a macro.

Em seguida, o driver de subunidade define o membro AVCStreamContext como o contexto de fluxo (identificador) do fluxo para anular o streaming.

Para enviar essa solicitação, uma subunidade envia um IRP IRP_MJ_INTERNAL_DEVICE_CONTROL com o membro IoControlCode do IRP definido como IOCTL_AVCSTRM_CLASS e o membro Argument1 do IRP definido para a estrutura AVC_STREAM_REQUEST_BLOCK que descreve a operação de streaming de anulação a ser realizada.

Esse código de função deve ser chamado em PASSIVE_LEVEL. Quando um IRP de dados está sendo cancelado, ele pode ser executado em DISPATCH_LEVEL. Nesse caso, uma subunidade deve iniciar um item de trabalho e chamar essa função em sua rotina de item de trabalho, que está sendo executada no PASSIVE_LEVEL.

Comentários

Observe que essa funcionalidade cancela todos os IRPs de streaming. Para cancelar um IRP individual, use IoCancelIrp.

Uma subunidade deve chamar isso quando seu dispositivo de destino for removido ou o IRP de dados original for cancelado para interromper a operação de fluxo.

Essa função não usa nenhum membro da união CommandData na estrutura AVC_STREAM_REQUEST_BLOCK.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

Requisitos

Cabeçalhos: Declarado em avcstrm.h. Inclua avcstrm.h.

Consulte Também

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION