структура 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
Указатель на FS_FILTER_CALLBACK подпрограмму PreAcquireForSectionSynchronization .
PostAcquireForSectionSynchronization
Указатель на FS_FILTER_CALLBACK подпрограмму PostAcquireForSectionSynchronization .
PreReleaseForSectionSynchronization
Указатель на FS_FILTER_CALLBACK подпрограмму PreReleaseForSectionSynchronization .
PostReleaseForSectionSynchronization
Указатель на FS_FILTER_CALLBACK подпрограмму PostReleaseForSectionSynchronization .
PreAcquireForCcFlush
Указатель на FS_FILTER_CALLBACK подпрограмму PreAcquireForCcFlush .
PostAcquireForCcFlush
Указатель на подпрограмму PostAcquireForCcFlush FS_FILTER_CALLBACK.
PreReleaseForCcFlush
Указатель на подпрограмму preReleaseForCcFlush FS_FILTER_CALLBACK.
PostReleaseForCcFlush
Указатель на подпрограмму PostReleaseForCcFlush FS_FILTER_CALLBACK.
PreAcquireForModifiedPageWriter
Указатель на FS_FILTER_CALLBACK подпрограмму PreAcquireForModifiedPageWriter .
PostAcquireForModifiedPageWriter
Указатель на подпрограмму PostAcquireForModifiedPageWriter FS_FILTER_CALLBACK.
PreReleaseForModifiedPageWriter
Указатель на подпрограмму preReleaseForModifiedPageWriter FS_FILTER_CALLBACK.
PostReleaseForModifiedPageWriter
Указатель на подпрограмму PostReleaseForModifiedPageWriter FS_FILTER_CALLBACK.
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 для этой операции. |
CompletionContext | Сведения о контексте, передаваемые в подпрограмму обратного вызова завершения фильтра. Задайте значение 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. В противном случае ему присваивается соответствующее значение состояния ошибки. |
CompletionContext | Сведения о контексте, заданные в процедуре обратного вызова фильтра. Для этого параметра устанавливается значение NULL , если информация не передается или если отсутствует соответствующая процедура обратного вызова фильтра. |
Подпрограммы обратного вызова определяются для следующих операций:
Операция | Процедуры обратного вызова уведомлений |
---|---|
Диспетчер памяти получает файл исключительно перед созданием раздела, сопоставленного в памяти, для части файла. Для этой операции параметру SyncType присвоено значение SyncTypeCreateSection. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization |
Диспетчер памяти освобождает файл после создания раздела, сопоставленного в памяти, для части файла. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
Компонент ядра (например, диспетчер кэша) получает файл исключительно перед тем, как временно отключить создание раздела для части файла. Для этой операции параметру SyncType присвоено значение SyncTypeДруго. | 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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по