Compartir a través de


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 almacenada 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 después de que la pila del controlador complete 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 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 Sin uso de búfer ni E/S directa.

Para las solicitudes 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, vea Inicializar un objeto de dispositivo.

Para las solicitudes IRP_MJ_DEVICE_CONTROL y IRP_MJ_INTERNAL_DEVICE_CONTROL , el método de E/S viene determinado por el valor TransferType que se encuentra en cada valor IOCTL. Para obtener más información, consulte Definición de códigos de control de E/S.

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