Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las rutinas DispatchRead y DispatchWrite de un controlador controlan IRP con códigos de función de E/S de IRP_MJ_READ y IRP_MJ_WRITE, respectivamente. Como alternativa, una rutina combinada DispatchReadWrite puede controlar IRPs para ambos códigos de función de E/S.
Cada controlador de un dispositivo desde el que se pueden transferir datos al sistema debe tener una rutina DispatchRead . Cada controlador de un dispositivo al que se pueden transferir datos desde el sistema debe tener una rutina DispatchWrite . Cualquier controlador que transfiera datos en ambas direcciones puede tener una rutina de DispatchReadWrite combinada.
Los controladores de nivel inferior controlan de forma asincrónica las solicitudes IRP_MJ_READ y IRP_MJ_WRITE. Por lo tanto, las rutinas DispatchRead o DispatchWrite de los controladores de nivel superior deben pasar estas solicitudes para su posterior procesamiento, siempre que la solicitud tenga parámetros válidos en la ubicación de la pila de E/S de ese controlador del IRP.
Si un controlador configura sus objetos de dispositivo para E/S con almacenamiento en búfer o E/S directa, afecta a cómo maneja las solicitudes de transferencia. En concreto, un controlador que usa E/S directa para realizar operaciones DMA podría necesitar dividir solicitudes de transferencia grandes en una secuencia de operaciones de transferencia más pequeñas para satisfacer una solicitud de IRP_MJ_READ o IRP_MJ_WRITE . Para obtener más información, consulte Técnicas de entrada y salida.
En las siguientes subsecciones se describen algunas de las consideraciones de diseño e implementación de las rutinas DispatchReadWrite en controladores de dispositivos de nivel más bajo que usan E/S almacenados en búfer y E/S directa, así como en controladores de nivel superior superados por encima de ellos:
Control de transferencias de forma asincrónica
DispatchReadWrite mediante E/S almacenadas en búfer
DispatchReadWrite mediante E/S directa