структура FS_FILTER_CALLBACKS (ntifs.h)
Структура FS_FILTER_CALLBACKS содержит точки входа подпрограмм обратного вызова уведомлений, предоставленных вызывающим абонентом.
Синтаксис
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;
Члены
SizeOfFsFilterCallbacks
Размер этой структуры в байтах. Установите значение sizeof(FS_FILTER_CALLBACKS)
.
SizeOfFsFilterCallbacks не должно быть равно нулю.
Reserved
Скрытный. Не используйте.
PreAcquireForSectionSynchronization
Указатель на подпрограмму preAcquireForSectionSynchronization FS_FILTER_CALLBACK.
PostAcquireForSectionSynchronization
Указатель на подпрограмму FS_FILTER_CALLBACK PostAcquireForSectionSynchron ization.
PreReleaseForSectionSynchronization
Указатель на подпрограмму preReleaseForSectionSynchronization FS_FILTER_CALLBACK.
PostReleaseForSectionSynchronization
Указатель на процедуру FS_FILTER_CALLBACK PostReleaseForSectionSynchronization.
PreAcquireForCcFlush
Указатель на FS_FILTER_CALLBACK подпрограмму PreAcquireForCcFlush.
PostAcquireForCcFlush
Указатель на процедуру FS_FILTER_CALLBACK PostAcquireForCcFlush.
PreReleaseForCcFlush
Указатель на процедуру FS_FILTER_CALLBACK PreReleaseForCcFlush.
PostReleaseForCcFlush
Указатель на процедуру FS_FILTER_CALLBACK PostReleaseForCcFlush.
PreAcquireForModifiedPageWriter
Указатель на подпрограмму FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter.
PostAcquireForModifiedPageWriter
Указатель на подпрограмму FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter.
PreReleaseForModifiedPageWriter
Указатель на подпрограмму FS_FILTER_CALLBACK preReleaseForModifiedPageWriter.
PostReleaseForModifiedPageWriter
Указатель на процедуру FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter.
PreQueryOpen
Указатель на FS_FILTER_CALLBACK подпрограмму PreQueryOpen.
PostQueryOpen
Указатель на подпрограмму postQueryOpen FS_FILTER_CALLBACK.
Замечания
Драйверы фильтров файловой системы и файловые системы вызывают FsRtlRegisterFileSystemFilterCallbacks подпрограммы для регистрации подпрограмм обратного вызова уведомлений, которые будут вызываться при выполнении определенных операций базовой файловой системы.
Все точки входа обратного вызова являются необязательными и могут быть NULL.
Подпрограмма обратного вызова фильтра FS_FILTER_CALLBACK и ее параметры определяются следующим образом:
typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
OUT PVOID *CompletionContext
);
Параметр | Значение |
---|---|
данных | Указатель на структуру FS_FILTER_CALLBACK_DATA для этой операции. |
ЗавершенияContext | Сведения о контексте, передаваемые в подпрограмму обратного вызова завершения фильтра. Задайте значение null, если нет данных контекста или если нет соответствующей процедуры обратного вызова завершения фильтра. |
Подпрограмма обратного вызова FS_FILTER_COMPLETION_CALLBACK фильтра и ее параметры определяются следующим образом:
typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
IN NTSTATUS OperationStatus,
IN PVOID CompletionContext
);
Параметр | Значение |
---|---|
данных | Указатель на структуру FS_FILTER_CALLBACK_DATA для этой операции. |
OperationStatus | Состояние операции. Если файловая система успешно выполнила операцию, этот параметр имеет значение STATUS_SUCCESS. В противном случае для него задано соответствующее значение состояния ошибки. |
ЗавершенияContext | Сведения о контексте, заданные в подпрограмме обратного вызова фильтра. Это значение имеет значение NULL, если данные не передаются или нет соответствующей процедуры обратного вызова фильтра. |
Подпрограммы обратного вызова определяются для следующих операций:
Операция | Подпрограммы обратного вызова уведомлений |
---|---|
Диспетчер памяти получает файл исключительно перед созданием раздела, сопоставленного с памятью, для части файла. Для этой операции SyncType задано значение SyncTypeCreateSection. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization |
Диспетчер памяти освобождает файл после создания раздела, сопоставленного с памятью, для части файла. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
Компонент ядра (например, диспетчер кэша) получает файл исключительно перед временной отключением раздела для части файла. Для этой операции SyncType имеет значение SyncTypeOther. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization всегда должен возвращать код состояния успешного выполнения (например, STATUS_SUCCESS) для этой операции. |
Компонент ядра (например, диспетчер кэша) освобождает файл после временного отключения раздела для части файла. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
Диспетчер кэша получает файл исключительно перед очисткой части файла из кэша. | PreAcquireForCcFlush, PostAcquireForCcFlush |
Диспетчер кэша освобождает файл после очистки части файла из кэша. | PreReleaseForCcFlush, PostReleaseForCcFlush |
Измененный модуль записи страниц получает файл исключительно перед записью части файла на диск. | PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter |
Измененная запись страницы освобождает файл после записи части файла на диск. | PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter |
Компонент запрашивает сведения о файле по имени без открытия файла. Перенаправления никогда не будут вызываться с этим запросом, поэтому не нужно реализовывать обратные вызовы PreQueryOpen или PostQueryOpen. | PreQueryOpen, PostQueryOpen |
Подпрограмма обратного вызова уведомлений фильтра вызывается до передачи запроса операции драйверам фильтров нижнего уровня и базовой файловой системе. В подпрограмме обратного вызова драйвер фильтра должен выполнять любую необходимую обработку и немедленно возвращать STATUS_SUCCESS. Если подпрограмма обратного вызова драйвера фильтра возвращает значение состояния, отличное от STATUS_SUCCESS, это приводит к сбою запроса операции. Повторяющийся сбой определенных запросов, таких как блокировка запросов, может остановить ход выполнения системы. Таким образом, драйверы фильтров должны завершиться ошибкой такого запроса только при абсолютной необходимости. При сбое этих запросов драйвер фильтра должен возвращать значение состояния ошибки, описывающее ошибку максимально точно и полностью.
Заметка
Подпрограмма обратного вызова обратного вызова драйвера фильтра не может завершить запрос на выпуск ресурса файловой системы. Если драйвер фильтра возвращает значение состояния, отличное от STATUS_SUCCESS из любой из следующих подпрограмм обратного вызова уведомлений, значение состояния игнорируется.
- PreReleaseForSectionSynchronization
- PreReleaseForCcFlush
- PreReleaseForModifiedPageWriter
Подпрограмма обратного вызова завершения фильтра вызывается после передачи запроса операции драйверам фильтров нижнего уровня и базовой файловой системе. В подпрограмме обратного вызова завершения драйвер фильтра должен выполнять любую необходимую обработку и немедленно возвращать.
Требования
Требование | Ценность |
---|---|
заголовка | ntifs.h |