Compartir a través de


estructura FS_FILTER_CALLBACKS (ntifs.h)

La estructura FS_FILTER_CALLBACKS contiene los puntos de entrada de las rutinas de devolución de llamada proporcionadas por el autor de la llamada.

Sintaxis

typedef struct _FS_FILTER_CALLBACKS {
  ULONG                          SizeOfFsFilterCallbacks;
  ULONG                          Reserved;
  PFS_FILTER_CALLBACK            PreAcquireForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreReleaseForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreAcquireForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
  PFS_FILTER_CALLBACK            PreReleaseForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
  PFS_FILTER_CALLBACK            PreAcquireForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreReleaseForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreQueryOpen;
  PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;

Miembros

SizeOfFsFilterCallbacks

Tamaño de esta estructura, en bytes. Establézcalo en sizeof(FS_FILTER_CALLBACKS). SizeOfFsFilterCallbacks no debe establecerse en cero.

Reserved

Reservado. No utilizar.

PreAcquireForSectionSynchronization

Puntero a una rutina de FS_FILTER_CALLBACK PreAcquireForSectionSynchronization .

PostAcquireForSectionSynchronization

Puntero a una rutina de FS_FILTER_CALLBACK PostAcquireForSectionSynchronization .

PreReleaseForSectionSynchronization

Puntero a una rutina de FS_FILTER_CALLBACK PreReleaseForSectionSynchronization .

PostReleaseForSectionSynchronization

Puntero a una rutina de FS_FILTER_CALLBACK PostReleaseForSectionSynchronization .

PreAcquireForCcFlush

Puntero a una rutina de FS_FILTER_CALLBACK PreAcquireForCcFlush .

PostAcquireForCcFlush

Puntero a una rutina de FS_FILTER_CALLBACK PostAcquireForCcFlush .

PreReleaseForCcFlush

Puntero a una rutina FS_FILTER_CALLBACK PreReleaseForCcFlush .

PostReleaseForCcFlush

Puntero a una rutina postReleaseForCcFlush de FS_FILTER_CALLBACK.

PreAcquireForModifiedPageWriter

Puntero a una rutina de FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter .

PostAcquireForModifiedPageWriter

Puntero a una FS_FILTER_CALLBACK rutina PostAcquireForModifiedPageWriter .

PreReleaseForModifiedPageWriter

Puntero a una rutina de FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter .

PostReleaseForModifiedPageWriter

Puntero a una rutina postReleaseForModifiedPageWriter de FS_FILTER_CALLBACK.

PreQueryOpen

Puntero a una rutina FS_FILTER_CALLBACK PreQueryOpen .

PostQueryOpen

Puntero a una rutina FS_FILTER_CALLBACK PostQueryOpen .

Comentarios

Los controladores de filtro del sistema de archivos y los sistemas de archivos llaman a la rutina FsRtlRegisterFileSystemFilterCallbacks para registrar rutinas de devolución de llamada de notificación que se invocarán cuando el sistema de archivos subyacente realiza determinadas operaciones.

Todos los puntos de entrada de devolución de llamada son opcionales y pueden ser NULL.

La rutina de devolución de llamada de filtro FS_FILTER_CALLBACK y sus parámetros se definen de la siguiente manera:


typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    OUT PVOID *CompletionContext
);

Parámetro Significado
Data Puntero a la estructura de FS_FILTER_CALLBACK_DATA para esta operación.
CompletionContext Información de contexto que se va a pasar a la rutina de devolución de llamada de finalización del filtro. Se establece en NULL si no se pasa ninguna información de contexto o si no hay ninguna rutina de devolución de llamada de finalización de filtro correspondiente.

La rutina de devolución de llamada de finalización del filtro FS_FILTER_COMPLETION_CALLBACK y sus parámetros se definen de la siguiente manera:


typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    IN NTSTATUS OperationStatus,
    IN PVOID CompletionContext
);

Parámetro Significado
Data Puntero a la estructura de FS_FILTER_CALLBACK_DATA para esta operación.
OperationStatus Estado de la operación. Si el sistema de archivos realizó correctamente la operación, este parámetro se establece en STATUS_SUCCESS. De lo contrario, se establece en un valor de estado de error adecuado.
CompletionContext Información de contexto establecida en la rutina de devolución de llamada de filtro. Se establece en NULL si no se pasa ninguna información o si no hay ninguna rutina de devolución de llamada de filtro correspondiente.

Las rutinas de devolución de llamada se definen para las siguientes operaciones:

Operación Rutinas de devolución de llamada de notificación
El administrador de memoria adquiere un archivo exclusivamente antes de crear una sección asignada a memoria para una parte del archivo. Para esta operación, SyncType se establece en SyncTypeCreateSection. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization
El administrador de memoria libera un archivo después de crear una sección asignada a memoria para una parte del archivo. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
Un componente de kernel (como el administrador de caché) adquiere un archivo exclusivamente antes de deshabilitar temporalmente la creación de secciones para una parte del archivo. Para esta operación, SyncType se establece en SyncTypeOther. PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization siempre debe devolver un código de estado correcto (como STATUS_SUCCESS) para esta operación.
Un componente de kernel (como el administrador de caché) libera un archivo después de deshabilitar temporalmente la creación de secciones para una parte del archivo. PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization
El administrador de caché adquiere un archivo exclusivamente antes de vaciar una parte del archivo de la memoria caché. PreAcquireForCcFlush, PostAcquireForCcFlush
El administrador de caché libera un archivo después de vaciar una parte del archivo de la memoria caché. PreReleaseForCcFlush, PostReleaseForCcFlush
El escritor de páginas modificado adquiere un archivo exclusivamente antes de escribir una parte del archivo en el disco. PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter
El escritor de páginas modificado libera un archivo después de escribir una parte del archivo en el disco. PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter
Un componente consulta la información de archivo por nombre sin abrir el archivo. Nunca se llamará a los redireccionadores con esta consulta y, por tanto, no es necesario implementar devoluciones de llamada PreQueryOpen o PostQueryOpen. PreQueryOpen, PostQueryOpen

La rutina de devolución de llamada de notificación de filtro se invoca antes de pasar la solicitud de operación a controladores de filtro de nivel inferior y al sistema de archivos subyacente. En la rutina de devolución de llamada, el controlador de filtro debe realizar cualquier procesamiento necesario y devolver inmediatamente STATUS_SUCCESS. Si la rutina de devolución de llamada de un controlador de filtro devuelve un valor de estado distinto de STATUS_SUCCESS, esto hace que se produzca un error en la solicitud de operación. Los errores repetidos de determinadas solicitudes, como las solicitudes de bloqueo, pueden detener el progreso del sistema. Por lo tanto, los controladores de filtro deben producir un error en dicha solicitud solo cuando sea absolutamente necesario. Cuando se producen errores en estas solicitudes, el controlador de filtro debe devolver un valor de estado de error que describa el error de la forma más completa y precisa posible.

Nota

Una rutina de devolución de llamada de notificación del controlador de filtro no puede producir un error en una solicitud para liberar un recurso del sistema de archivos. Si un controlador de filtro devuelve un valor de estado distinto de STATUS_SUCCESS de cualquiera de las siguientes rutinas de devolución de llamada de notificación, se omite el valor de estado.

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

La rutina de devolución de llamada de finalización del filtro se invoca después de pasar la solicitud de operación a controladores de filtro de nivel inferior y al sistema de archivos subyacente. En la rutina de devolución de llamada de finalización, el controlador de filtro debe realizar cualquier procesamiento necesario y devolverlo inmediatamente.

Requisitos

Requisito Valor
Header ntifs.h

Consulte también

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks