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

См. также раздел

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks