IRP_MJ_WRITE
Cada controlador de dispositivo que transfiere datos del sistema a su dispositivo debe controlar las solicitudes de escritura en una rutina DispatchWrite o DispatchReadWrite , como debe tener cualquier controlador de nivel superior en capas sobre dicho controlador de dispositivo.
Cuándo se envió
Cada vez que siga la finalización correcta de una solicitud de creación.
Posiblemente, una aplicación en modo de usuario o un componente Win32 con un identificador para el objeto de archivo que representa el objeto de dispositivo de destino ha solicitado una transferencia de datos al dispositivo. Posiblemente, un controlador de nivel superior ha creado y configurado el IRP de escritura.
Parámetros de entrada
La ubicación de la pila de E/S del controlador en irP indica cuántos bytes se van a transferir en Parameters.Write.Length.
Algunos controladores usan el valor en Parameters.Write.Key para ordenar las solicitudes de escritura entrantes en un orden determinado por el controlador en la cola del dispositivo o en una cola interna administrada por el controlador de irP.
Ciertos tipos de controladores también usan el valor en Parameters.Write.ByteOffset, que indica el desplazamiento inicial de la operación de transferencia. Por ejemplo, vea el tema IRP_MJ_WRITE en la documentación del sistema de archivos instalable (IFS).
Dependiendo de si el controlador de dispositivo subyacente configura las marcas del objeto de dispositivo de destino con DO_BUFFERED_IO o con DO_DIRECT_IO, los datos se transfieren desde una de las siguientes opciones:
Búfer en Irp-AssociatedIrp.SystemBuffer>, si el controlador usa E/S almacenada en búfer.
El búfer descrito por mdL en Irp-MdlAddress>, si el controlador de dispositivo subyacente usa E/S directa (DMA o PIO)
Parámetros de salida
None
Operación
Al recibir una solicitud de escritura, un controlador de nivel superior configura la ubicación de pila de E/S en el IRP para el controlador inferior siguiente, o crea y configura IRP adicionales para uno o varios controladores inferiores. Puede configurar su rutina de IoCompletion , que es opcional para irP de entrada, pero necesaria para irP creados por el controlador, llamando a IoSetCompletionRoutine. A continuación, el controlador pasa la solicitud al controlador inferior siguiente con IoCallDriver.
Al recibir una solicitud de escritura, un controlador de dispositivo transfiere datos de la memoria del sistema a su dispositivo. El controlador de dispositivo establece el campo Información del bloque de estado de E/S en el número de bytes transferidos cuando completa el IRP.
Requisitos
Encabezado |
Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h) |