AVCSTRM_READ

Il codice della funzione AVCSTRM_READ viene usato per inviare un buffer di dati avcstrm.sys riempito di dati dal 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_READ nell'argomento Request della macro.

AVCStreamContext
Specifica il contesto di flusso (handle) restituito da una chiamata di AVCSTRM_OPEN precedente che rappresenta l'origine dei dati per l'operazione di lettura.

BufferStruct
Specifica il buffer in cui l'operazione di lettura deve inserire i dati.

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 che fornisce i dati da leggere. Infine, il driver subunit imposta il membro BufferStruct dell'unione CommandData che descrive il buffer in cui vengono inseriti i dati dell'operazione di lettura.

Per inviare questa richiesta, una 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 lettura 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