Функция FltNotifyFilterChangeDirectory (fltkernel.h)

Подпрограмма FltNotifyFilterChangeDirectory создает структуру уведомления для IRP_MN_NOTIFY_CHANGE_DIRECTORY операции и добавляет ее в указанный список уведомлений.

Синтаксис

VOID FLTAPI FltNotifyFilterChangeDirectory(
  [in, out]      PNOTIFY_SYNC               NotifySync,
  [in, out]      PLIST_ENTRY                NotifyList,
  [in]           PVOID                      FsContext,
  [in]           PSTRING                    FullDirectoryName,
  [in]           BOOLEAN                    WatchTree,
  [in]           BOOLEAN                    IgnoreBuffer,
  [in]           ULONG                      CompletionFilter,
  [in]           PFLT_CALLBACK_DATA         NotifyCallbackData,
  [in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
  [in, optional] PSECURITY_SUBJECT_CONTEXT  SubjectContext,
  [in, optional] PFILTER_REPORT_CHANGE      FilterCallback
);

Параметры

[in, out] NotifySync

Указатель на непрозрачный объект синхронизации для списка уведомлений об изменении каталога, на который указывает параметр NotifyList .

[in, out] NotifyList

Указатель на заголовок списка уведомлений каталога изменений для текущего тома. Каждый элемент в списке является непрозрачной структурой уведомления.

[in] FsContext

Указатель на уникальное значение, присвоенное вызывающим для идентификации создаваемой структуры уведомления. Если подпрограмма обратного вызова указана в параметре TraverseCallback , FsContext передается в качестве параметра NotifyContext этой подпрограмме.

[in] FullDirectoryName

Указатель на строку ANSI или Юникода, содержащую полное имя каталога, связанного с этой структурой уведомлений.

[in] WatchTree

Задайте значение TRUE , если все подкаталоги каталога, указанного параметром FullDirectoryName , также должны отслеживаться. Установите значение FALSE , если необходимо отслеживать только сам каталог.

[in] IgnoreBuffer

Задайте значение TRUE , чтобы игнорировать любые пользовательские буферы и принудительно переумеровать каталог. Это действие ускоряет операцию.

[in] CompletionFilter

Битовая маска флагов, указывающих типы изменений в файлах или каталогах, которые должны привести к завершению структур данных обратного вызова в списке уведомлений. Возможные значения флагов описаны в следующей таблице.

Flag Значение
FILE_NOTIFY_CHANGE_FILE_NAME Файл был добавлен, удален или переименован в этом каталоге.
FILE_NOTIFY_CHANGE_DIR_NAME Подкаталог был создан, удален или переименован.
FILE_NOTIFY_CHANGE_NAME Имя этого каталога изменилось.
FILE_NOTIFY_CHANGE_ATTRIBUTES Значение атрибута этого файла, например время последнего доступа, изменилось.
FILE_NOTIFY_CHANGE_SIZE Размер этого файла изменился.
FILE_NOTIFY_CHANGE_LAST_WRITE Время последнего изменения этого файла изменилось.
FILE_NOTIFY_CHANGE_LAST_ACCESS Время последнего доступа к этому файлу изменилось.
FILE_NOTIFY_CHANGE_CREATION Время создания этого файла изменилось.
FILE_NOTIFY_CHANGE_EA Расширенные атрибуты этого файла были изменены.
FILE_NOTIFY_CHANGE_SECURITY Сведения о безопасности этого файла изменились.
FILE_NOTIFY_CHANGE_STREAM_NAME Файловый поток добавлен, удален или переименован в этом каталоге.
FILE_NOTIFY_CHANGE_STREAM_SIZE Размер этого файлового потока изменился.
FILE_NOTIFY_CHANGE_STREAM_WRITE Данные этого потока файлов изменились.

[in] NotifyCallbackData

Указатель на структуру данных обратного вызова для операции, добавляемой в список уведомлений. Этот параметр является обязательным и не может иметь значение NULL.

[in, optional] TraverseCallback

Необязательный указатель на подпрограмму обратного вызова, вызываемую при изменении в подкаталоге, который наблюдается в дереве каталогов. Этот указатель позволяет файловой системе проверка, имеет ли наблюдатель доступ к этому каталогу. Такая подпрограмма, предоставляемая вызывающим абонентом, объявляется следующим образом:

NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID TargetContext,                     // Context pointer
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
    );

Дополнительные сведения о параметре TargetContext см. в разделе Параметр TargetContextподпрограммы FsRtlNotifyFullReportChange .

[in, optional] SubjectContext

Указатель на структуру контекста, передаваемую в TraverseCallback. FltNotifyFilterChangeDirectory освобождает контекст и освобождает структуру после его использования. Если указана подпрограмма TraverseCallback , subjectContext передается в качестве параметра SubjectContext в эту подпрограмму.

[in, optional] FilterCallback

Необязательный указатель на подпрограмму обратного вызова, вызываемую при изменении каталога. Если эта подпрограмма обратного вызова возвращает значение TRUE, FsRtlNotifyFilterReportChange завершает ожидающие операции IRP_MN_NOTIFY_CHANGE_DIRECTORY в списке уведомлений; в противном случае — нет. Такая подпрограмма, предоставляемая вызывающим абонентом, объявляется следующим образом:

BOOLEAN
(*PFILTER_REPORT_CHANGE) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID FilterContext                      // Context pointer
    );

Возвращаемое значение

None

Remarks

Драйвер минифильтра может вызывать FltNotifyFilterChangeDirectory из процедуры обратного вызова перед операцией (PFLT_PRE_OPERATION_CALLBACK), зарегистрированной для обработки операций уведомления об изменении каталога. Эти операции имеют основной код функции IRP_MJ_DIRECTORY_CONTROL и дополнительный код функции IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Драйвер минифильтра вызывает FltNotifyFilterChangeDirectory , чтобы создать структуру уведомлений для хранения структуры данных обратного вызова для операции и добавить структуру уведомления в список уведомлений для текущего тома.

FltNotifyFilterChangeDirectory выполняет следующие действия:

  • Проверяет, был ли очищен объект файла операции. В этом случае FltNotifyFilterChangeDirectory завершает операцию с состоянием STATUS_NOTIFY_CLEANUP и не добавляет ее в список уведомлений.
  • Если файловый объект операции не был очищен, FltNotifyFilterChangeDirectory проверяет, содержит ли список уведомлений структуру уведомлений для заданного значения FsContext . Если такая структура уведомлений найдена и в отчете ожидаются изменения, FltNotifyFilterChangeDirectory завершает структуру данных обратного вызова, на которую указывает параметр NotifyCallbackData . Если структура уведомления найдена, но в отчете нет ожидающих изменений, FltNotifyFilterChangeDirectory добавляет операцию в структуру уведомления. Если такая структура уведомления не найдена, FltNotifyFilterChangeDirectory создает структуру уведомления для операции и вставляет ее в список.
При изменении каталога файловая система вызывает FsRtlNotifyFilterReportChange для завершения ожидающих операций IRP_MN_NOTIFY_CHANGE_DIRECTORY в списке уведомлений.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть fltkernel.h (включая Fltkernel.h)
Библиотека FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

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

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK