Compartir a través de


estructura PREFETCH_OPEN_ECP_CONTEXT (ntifs.h)

La estructura PREFETCH_OPEN_ECP_CONTEXT comunica si la captura previa realiza una solicitud abierta determinada en un archivo.

Sintaxis

typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;

Miembros

Context

Puntero a un contexto opaco asociado a la solicitud abierta.

Observaciones

La captura previa es un componente del sistema operativo que está estrechamente integrado con el administrador de caché y el administrador de memoria para que el acceso al disco sea más eficaz y, por tanto, mejore el rendimiento. Si otros componentes interfieren con la captura previa, el rendimiento del sistema disminuye y podría interbloquear. Por lo tanto, el prefetcher adjunta la estructura PREFETCH_OPEN_ECP_CONTEXT a un archivo para comunicar que el prefetcher ha realizado una solicitud abierta en ese archivo. La captura previa usa el GUID de GUID_ECP_PREFETCH_OPEN en una llamada a la FltCreateFileEx2 o rutina de IoCreateFileEx para adjuntar la estructura de PREFETCH_OPEN_ECP_CONTEXT. Un controlador de filtro del sistema de archivos (filtro) puede llamar a FltFindExtraCreateParameter para determinar si PREFETCH_OPEN_ECP_CONTEXT está asociado al archivo y, a continuación, realizar las acciones adecuadas. El filtro debe llamar a la rutina FltIsEcpFromUserMode para determinar si la estructura de contexto de PREFETCH_OPEN_ECP_CONTEXT se originó en el modo kernel. Para evitar que las aplicaciones malintencionadas suplantan el prefetcher, el filtro no debe aceptar PREFETCH_OPEN_ECP_CONTEXT si se originó en el modo de usuario.

Una vez que la captura previa adjunta la estructura de PREFETCH_OPEN_ECP_CONTEXT a un archivo, toda la actividad de captura previa adicional para el archivo implica el objeto de archivo que tiene PREFETCH_OPEN_ECP_CONTEXT adjunto. Si un filtro debe identificar las solicitudes del sistema de archivos de captura previa que no sean solicitudes de creación, el filtro debe mantener su propio estado (por ejemplo, el administrador de filtros controla contextos). El filtro mantiene su propio estado para determinar si un objeto de archivo determinado es un objeto de archivo de captura previa.

El administrador de memoria puede almacenar en caché el objeto de archivo de captura previa. Después, el administrador de memoria puede usar el objeto de archivo de captura previa para otras aplicaciones que realizan E/S asignadas o E/S almacenadas en caché mediante el administrador de caché. Por lo tanto, el objeto de archivo de captura previa se puede usar para paginar E/S antes o después de que el prefetcher cierre su identificador. Esta E/S de paginación puede incluir escrituras de paginación, aunque el prefetcher nunca escriba datos. Otras aplicaciones generan las escrituras de paginación. El administrador de memoria escribe datos de las aplicaciones mediante su objeto de archivo de captura previa almacenado en caché. Por lo tanto, el filtro realiza el trabajo que se desencadena mediante la paginación de escrituras, el filtro debe seguir realizando ese trabajo, incluso si las escrituras de paginación vienen en un objeto de archivo de captura previa.

Cuando un filtro determina que se produjo una operación de limpieza en un objeto de archivo de captura previa, el filtro ya no debe considerar que ese objeto de archivo se abra previamente.

A continuación se muestran operaciones comunes que realiza la captura previa (sin embargo, en estas operaciones, el prefetcher nunca cambia el contenido del archivo):

  • Volumen abierto y cerrado
  • Abrir y cerrar el archivo
  • Consulta de la información del archivo
  • Establecer información de archivo (solo para indicar al sistema de archivos que no actualice la hora de último acceso para esta apertura)
  • Creación de una imagen y una sección de datos
  • Realizar E/S de paginación asincrónica

Para evitar la inducción de una posible situación de interbloqueo, un filtro debe:

  • Nunca bloquee ninguna operación de captura previa.
  • Pase las operaciones de captura previa sin emitir otras solicitudes del sistema de archivos.

Para que cualquier aplicación o controlador acceda a cualquiera de los datos que se capturan previamente, debe abrir su propio identificador para el archivo o crear una sección o ambas.

Para obtener información sobre cómo usar ECP para asociar información adicional a una operación de IRP_MJ_CREATE en un archivo, vea Using Extra Create Parameters with an IRP_MJ_CREATE Operation.

La estructura PREFETCH_OPEN_ECP_CONTEXT es de solo lectura. Debe usarlo para recuperar información sobre un ECP abierto previamente. Para obtener más información sobre este problema, consulte System-Defined ECPs.

Requisitos

Requisito Valor
cliente mínimo admitido Windows Vista
encabezado de ntifs.h (incluya Ntifs.h)

Consulte también

FltCreateFileEx2

FltIsEcpFromUserMode

IoCreateFileEx