Condividi tramite


AVCSTRM_WRITE

Il codice della funzione AVCSTRM_WRITE viene usato per inviare un buffer di dati da trasmettere al flusso specificato.

Blocco dello stato I/O

Se ha esito positivo, avcstrm.sys imposta Irp-IoStatus.Status> su STATUS_SUCCESS.

I valori restituiti degli errori possibili includono:

Stato errore Descrizione
STATUS_DEVICE_REMOVED Il dispositivo corrispondente all'operazione di AVCSTRM_READ non esiste più.
STATUS_CANCELLED Impossibile completare la richiesta.
STATUS_INVALID_PARAMETER Un parametro specificato nell'IRP non è corretto,
STATUS_INSUFFICIENT_RESOURCES Le risorse di sistema non sono state sufficienti per completare la richiesta.
STATUS_PENDING La richiesta è stata ricevuta, ma richiede un'ulteriore elaborazione. La routine di completamento di I/O gestirà la risposta finale.

AVC_STREAM_REQUEST_BLOCK Input

SizeOfThisBlock, versione e funzione
Usare la macro INIT_AVCSTRM_HEADER per inizializzare questi membri. Passare AVCSTRM_WRITE nell'argomento Request della macro.

AVCStreamContext
Specifica il contesto di flusso (handle) restituito da una chiamata precedente AVCSTRM_OPEN che è la destinazione per l'operazione di scrittura dei dati.

BufferStruct
Specifica il buffer da cui deve essere ottenuta l'operazione di scrittura.

Un driver subunit deve prima allocare un'IRP e una struttura AVC_STREAM_REQUEST_BLOCK .

Successivamente, deve usare la macro INIT_AVCSTRM_HEADER per inizializzare la struttura AVC_STREAM_REQUEST_BLOCK , passando AVCSTRM_READ come argomento Request alla macro.

Successivamente, il driver subunit imposta il membro AVCStreamContext sul contesto di flusso (handle) del flusso di destinazione dell'operazione di scrittura dei dati. Infine, il driver subunit imposta il membro BufferStruct dell'unione CommandData che descrive il buffer da cui viene ottenuta l'operazione di scrittura.

Per inviare questa richiesta, un subunit invia un IRP_MJ_INTERNAL_DEVICE_CONTROL IRP con il membro IoControlCode dell'IRP impostato su IOCTL_AVCSTRM_CLASS e il membro Argument1 dell'IRP impostato sulla struttura AVC_STREAM_REQUEST_BLOCK che descrive l'operazione di scrittura da eseguire.

Questo comando completa in modo asincrono. Al termine, viene chiamata la routine di completamento di I/O impostata in IRP.

Questo codice di funzione deve essere chiamato in IRQL = PASSIVE_LEVEL.

Commenti

Questa funzione usa il membro BufferStruct dell'unione CommandData nella struttura AVC_STREAM_REQUEST_BLOCK, come illustrato di seguito.

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;

Requisiti

Intestazioni: Dichiarato in avcstrm.h. Includere avcstrm.h.

Vedere anche

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_BUFFER_STRUCT

AVCSTRM_FUNCTION