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 |