Поделиться через


структура 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

См. также

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks