Compartilhar via


AVCSTRM_CLOSE

O código da função AVCSTRM_CLOSE fecha o fluxo especificado e libera todos os recursos alocados em AVCSTRM_OPEN.

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_CLOSE no argumento Solicitação da macro.

AVCStreamContext
Especifica o contexto de fluxo (identificador) do fluxo a ser fechado. Se AVCSTRM_CLOSE retornar com êxito, esse valor não será mais válido.

Veja a seguir um exemplo de como especificar o fluxo a ser fechado:

    pAVCStrmReq = &pStrmExt->AVCStrmReq;
    RtlZeroMemory(pAVCStrmReq, sizeof(AVC_STREAM_REQUEST_BLOCK));
    INIT_AVCSTRM_HEADER(pAVCStrmReq, AVCSTRM_CLOSE);

    pAVCStrmReq->AVCStreamContext = pStrmExt->AVCStreamContext;

    Status = 
        AVCStrmReqSubmitIrpSynch ( 
            pDevExt->pBusDeviceObject,
            pStrmExt->pIrpReq,
            pAVCStrmReq
            );

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

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

Em seguida, o driver de subunidade define o membro AVCStreamContext como o fluxo a ser fechado.

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 fechamento a ser realizada.

Um driver de subunidade pode esperar que esse comando seja concluído de forma síncrona. O resultado retorna imediatamente sem operação pendente no avcstrm.sys.

Esse código de função deve ser chamado em IRQL = PASSIVE_LEVEL.

Comentários

Essa função usa o membro AVCStreamContext da união CommandData na estrutura AVC_STREAM_REQUEST_BLOCK, conforme mostrado abaixo.

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

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION