Compartir a través de


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

Operaciones IOCTL y FSCTL basadas en IRP

Operaciones de E/S basadas en IRP que no tienen búferes