Determinar el método de almacenamiento en búfer para una operación de E/S
Al igual que los controladores de dispositivos, los sistemas de archivos son responsables de transferir datos entre 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:
En E/S almacenada en búfer, el administrador de E/S asigna un búfer del sistema para la operación desde un grupo no paginado. El administrador de E/S copia los datos de este búfer del sistema en el búfer de usuario de la aplicación, y viceversa, en el contexto del subproceso que inició la operación de E/S.
En E/S directa, el administrador de E/S sondea y bloquea el búfer de usuario. A continuación, crea una lista de descriptores de memoria (MDL) para asignar el búfer bloqueado. El administrador de E/S accede al búfer en el contexto del subproceso que inició la operación de E/S.
En ni almacenado en búfer ni en E/S directa, el administrador de E/S no asigna un búfer del sistema y no bloquea ni asigna el búfer de usuario. En su lugar, simplemente pasa la dirección virtual del espacio de usuario original del búfer a la pila del sistema de archivos. Los controladores son responsables de asegurarse de que se ejecutan en el contexto del subproceso iniciador y de que las direcciones del búfer son válidas.
Los controladores de minifiltro deben validar cualquier dirección en el espacio del usuario antes de intentar usarlo. El administrador de E/S y el administrador de filtros no validan estas direcciones y no validan punteros incrustados en búferes que se pasan a controladores de minifiltro.
Todos los sistemas de archivos estándar de Microsoft no usan ni búfer ni E/S directa para la mayoría del procesamiento de E/S.
Para obtener más información sobre los métodos de almacenamiento en búfer, vea Métodos para acceder a los búferes de datos.
En el caso de las operaciones de E/S basadas en IRP, el método de almacenamiento en búfer usado es específico de la operación y viene determinado por los siguientes factores:
Tipo de operación de E/S que se está realizando
Valor del miembro Flags de la estructura DEVICE_OBJECT para el volumen del sistema de archivos
Para las operaciones de control de E/S (IOCTL) y control del sistema de archivos (FSCTL), el valor del parámetro TransferType que se pasó a la macro CTL_CODE cuando se definió el IOCTL o FSCTL
Las operaciones de E/S rápidas que tienen búferes siempre usan ni E/S directa ni almacenada en búfer.
Las operaciones de devolución de llamada del sistema de archivos no tienen búferes.
Esta sección incluye:
Operaciones que se pueden IRP-Based o E/S rápidas
Operaciones de E/S basadas en IRP que obedecen las marcas de objeto de dispositivo
Operaciones de E/S basadas en IRP que siempre usan E/S almacenadas en búfer
Operaciones de E/S basadas en IRP que siempre usan E/S almacenadas en búfer ni en E/S directas