IRP_MJ_READ
Cada controlador de dispositivo que transfiere datos de su dispositivo al sistema debe controlar las solicitudes de lectura en una rutina DispatchRead 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 desde el dispositivo. Posiblemente, un controlador de nivel superior ha creado y configurado el IRP de lectura.
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.Read.Length.
Algunos controladores usan el valor en Parameters.Read.Key para ordenar las solicitudes de lectura entrantes en un orden determinado por el controlador en la cola de dispositivos o en una cola interna administrada por el controlador de los IRP.
Ciertos tipos de controladores también usan el valor en Parameters.Read.ByteOffset, que indica el desplazamiento inicial de la operación de transferencia. Por ejemplo, consulte el tema IRP_MJ_READ en la documentación del sistema de archivos instalable (IFS).
Parámetros de salida
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 a uno de los siguientes:
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).
Operación
Al recibir una solicitud de lectura, 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 lectura, un controlador de dispositivo transfiere datos de su dispositivo a la memoria del sistema. 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) |