Métodos para acceder a búferes de datos

Una de las principales responsabilidades de las pilas de controladores es transferir datos entre las aplicaciones en modo de usuario y los dispositivos de un sistema. El sistema operativo proporciona los tres métodos siguientes para acceder a los búferes de datos:

E/S almacenados en búfer
El sistema operativo crea un búfer del sistema no paginado, igual de tamaño al búfer de la aplicación. Para las operaciones de escritura, el administrador de E/S copia los datos de usuario en el búfer del sistema antes de llamar a la pila de controladores. En el caso de las operaciones de lectura, el administrador de E/S copia los datos del búfer del sistema en el búfer de la aplicación una vez completada la operación solicitada.

Para obtener más información, consulte Uso de E/S almacenada en búfer.

E/S directa
El sistema operativo bloquea el búfer de la aplicación en memoria. A continuación, crea una lista de descriptores de memoria (MDL) que identifica las páginas de memoria bloqueadas y pasa la MDL a la pila de controladores. Los controladores acceden a las páginas bloqueadas a través de MDL.

Para obtener más información, consulte Uso de E/S directa.

Ni almacenado en búfer ni E/S directa
El sistema operativo pasa la dirección de inicio virtual y el tamaño del búfer de la aplicación a la pila de controladores. El búfer solo es accesible desde controladores que se ejecutan en el contexto del subproceso de la aplicación.

Para obtener más información, consulte Uso de E/S directa ni almacenada en búfer.

Para las solicitudes de IRP_MJ_READ y IRP_MJ_WRITE , los controladores especifican el método de E/S mediante marcas en cada estructura de DEVICE_OBJECT . Para obtener más información, consulte Inicialización de un objeto de dispositivo.

Para IRP_MJ_DEVICE_CONTROL y IRP_MJ_INTERNAL_DEVICE_CONTROL solicitudes, el método de E/S viene determinado por el valor TransferType contenido en cada valor IOCTL. Para obtener más información, vea Definir códigos de control de E/S.

Todos los controladores de una pila de controladores deben usar el mismo método de acceso al búfer para cada solicitud, excepto posiblemente para el controlador de nivel superior (que puede usar el método "ninguno", independientemente del método utilizado por los controladores inferiores).