IRP_MJ_WRITE
Ogni driver di dispositivo che trasferisce i dati dal sistema al dispositivo deve gestire le richieste di scrittura in una routine DispatchWrite o DispatchReadWrite , in quanto deve disporre di qualsiasi driver di livello superiore su tale driver di dispositivo.
Data di invio
In qualsiasi momento dopo il completamento corretto di una richiesta di creazione.
Ad esempio, 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 dei dati al dispositivo. Probabilmente, un driver di livello superiore ha creato e configurato l'IRP di scrittura.
Parametri di input
Il percorso dello stack di I/O del driver in IRP indica il numero di byte da trasferire in Parameters.Write.Length.
Alcuni driver usano il valore in Parameters.Write.Key per ordinare le richieste di scrittura in ingresso in un ordine determinato dal driver nella coda del dispositivo o in una coda interna gestita dal driver di runtime di integrazione.
Alcuni tipi di driver usano anche il valore in Parameters.Write.ByteOffset, che indica l'offset iniziale per l'operazione di trasferimento. Ad esempio, vedere l'argomento IRP_MJ_WRITE nella documentazione di IfS (Installable File System).
A seconda che il driver di dispositivo sottostante imposti i flag dell'oggetto dispositivo di destinazione con DO_BUFFERED_IO o con DO_DIRECT_IO, i dati vengono trasferiti da uno dei seguenti:
Buffer in Irp-AssociatedIrp.SystemBuffer>, se il driver usa I/O memorizzato nel buffer
Buffer descritto da MDL in Irp-MdlAddress>, se il driver di dispositivo sottostante usa I/O diretto (DMA o PIO)
Parametri di output
Nessuno
Operazione
Al ricevimento di una richiesta di scrittura, un driver di livello superiore configura la posizione dello stack di I/O in IRP per il driver inferiore successivo oppure crea e configura altri provider di integrazione per uno o più driver inferiori. Può configurare la routine IoCompletion , facoltativa per l'IRP di input, ma necessaria per i runtime di integrazione creati dal driver, chiamando IoSetCompletionRoutine. Il driver passa quindi la richiesta al driver inferiore successivo con IoCallDriver.
Alla ricezione di una richiesta di scrittura, un driver di dispositivo trasferisce i dati dalla memoria di sistema al dispositivo. 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) |