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.