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. Establezca en sizeof(FS_FILTER_CALLBACKS)
.
sizeOfFsFilterCallbacks no debe establecerse en cero.
Reserved
Reservado. No use.
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 de FS_FILTER_CALLBACK PreReleaseForCcFlush.
PostReleaseForCcFlush
Puntero a una rutina de FS_FILTER_CALLBACK PostReleaseForCcFlush.
PreAcquireForModifiedPageWriter
Puntero a una rutina de FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter.
PostAcquireForModifiedPageWriter
Puntero a una rutina de postAcquireForModifiedPageWriter FS_FILTER_CALLBACK.
PreReleaseForModifiedPageWriter
Puntero a una rutina preReleaseForModifiedPageWriter de FS_FILTER_CALLBACK.
PostReleaseForModifiedPageWriter
Puntero a una rutina de FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter.
PreQueryOpen
Puntero a una rutina de FS_FILTER_CALLBACK PreQueryOpen.
PostQueryOpen
Puntero a una rutina de FS_FILTER_CALLBACK PostQueryOpen.
Observaciones
Los controladores de filtro del sistema de archivos y los sistemas de archivos llaman a la rutina de FsRtlRegisterFileSystemFilterCallback s 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 se pueden 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. Establézcalo en null si no se pasa información de contexto o si no hay ninguna rutina de devolución de llamada de finalización de filtros 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 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 que la solicitud de operación se pase a los 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. El error repetido de determinadas solicitudes, como bloquear las solicitudes, puede detener el progreso del sistema. Por lo tanto, los controladores de filtro deben producir un error en esta 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 lo más completo y preciso 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 los 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 e devolver inmediatamente.
Requisitos
Requisito | Valor |
---|---|
encabezado de | ntifs.h |