IRP_MJ_READ
Ogni driver di dispositivo che trasferisce i dati dal dispositivo al sistema deve gestire le richieste di lettura in una routine DispatchRead o DispatchReadWrite , come deve qualsiasi driver di livello superiore su tale driver di dispositivo.
Data di invio
Ogni volta che segue il completamento corretto di una richiesta di creazione.
Eventualmente, un'applicazione in modalità utente o un componente Win32 con un handle per l'oggetto file che rappresenta l'oggetto dispositivo di destinazione ha richiesto un trasferimento dati dal dispositivo. Probabilmente, un driver di livello superiore ha creato e configurato l'IRP di lettura.
Parametri di input
Il percorso dello stack I/O del driver nell'IRP indica il numero di byte da trasferire in Parameters.Read.Length.
Alcuni driver usano il valore in Parameters.Read.Key per ordinare le richieste di lettura in ingresso in un ordine determinato dal driver nella coda del dispositivo o in una coda interna gestita da driver di IRP.
Alcuni tipi di driver usano anche il valore in Parameters.Read.ByteOffset, che indica l'offset iniziale per l'operazione di trasferimento. Ad esempio, vedere l'argomento IRP_MJ_READ nella documentazione di Installable File System (IFS).
Parametri di output
A seconda che il driver di dispositivo sottostante configura i flag dell'oggetto dispositivo di destinazione con DO_BUFFERED_IO o con DO_DIRECT_IO, i dati vengono trasferiti in uno dei seguenti:
Buffer in Irp-AssociatedIrp.SystemBuffer> se il driver usa l'I/O con buffer.
Il buffer descritto dall'MDL in Irp-MdlAddress> se il driver di dispositivo sottostante usa l'I/O diretto (DMA o PIO).
Operazione
Quando viene ricevuta una richiesta di lettura, un driver di livello superiore configura la posizione dello stack di I/O nell'IRP per il driver inferiore successivo oppure crea e configura altri INDIRIZZI DI RETE per uno o più driver inferiori. Può configurare la routine IoCompletion , facoltativa per l'IRP di input, ma necessaria per i irP creati dal driver chiamando IoSetCompletionRoutine. Il driver passa quindi la richiesta al driver inferiore successivo con IoCallDriver.
In caso di ricezione di una richiesta di lettura, un driver del dispositivo trasferisce i dati dal dispositivo alla memoria di sistema. Il driver di dispositivo imposta il campo Informazioni del blocco di stato di I/O sul numero di byte trasferiti al termine dell'IRP.
Requisiti
Intestazione |
Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h) |