AVCSTRM_WRITE
O código da função AVCSTRM_WRITE é usado para enviar um buffer de dados a ser transmitido para o fluxo especificado.
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_WRITE 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.
BufferStruct
Especifica o buffer do qual a operação de gravação deve obter 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 que é o destino da operação de gravação de dados. Por fim, o driver de subunidade define o membro BufferStruct da união CommandData que descreve o buffer do qual a operação de gravação obtém dados.
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 gravação a ser realizada.
Esse comando é concluído de forma assíncrona. Quando ele for concluído, a rotina de conclusão de E/S definida no IRP será chamada.
Esse código de função deve ser chamado em IRQL = PASSIVE_LEVEL.
Comentários
Essa função usa o membro BufferStruct 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;
.
.
union _tagCommandData {
.
.
AVCSTRM_BUFFER_STRUCT BufferStruct;
.
.
} CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Requisitos
Cabeçalhos: Declarado em avcstrm.h. Inclua avcstrm.h.