Функция 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 создает структуру уведомления для операции и вставляет ее в список.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |