Функция FsRtlNotifyFullChangeDirectory (ntifs.h)
Подпрограмма FsRtlNotifyFullChangeDirectory создает структуру уведомлений для запроса на уведомление и добавляет ее в указанный список уведомлений.
Синтаксис
void FsRtlNotifyFullChangeDirectory(
[in] PNOTIFY_SYNC NotifySync,
[in] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in, optional] PIRP NotifyIrp,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext
);
Параметры
[in] NotifySync
Указатель на непрозрачный объект синхронизации для списка уведомлений для текущего тома.
[in] NotifyList
Указатель на заголовок списка уведомлений. Каждый элемент в списке является непрозрачной структурой уведомления.
[in] FsContext
Указатель на уникальное значение, присвоенное файловой системой для идентификации создаваемой структуры уведомления как принадлежащей определенному объекту файла. Если указана подпрограмма TraverseCallback , FsContext передается в качестве параметра NotifyContext этой подпрограмме.
[in] FullDirectoryName
Указатель на строку ANSI или Юникода, содержащую полное имя каталога, связанного с этой структурой уведомлений. Игнорируется, если NotifyIrp имеет значение NULL.
[in] WatchTree
Установите значение TRUE, если все подкаталоги этого каталога также должны отслеживаться. Установите значение FALSE, если необходимо отслеживать только сам каталог. Игнорируется, если NotifyIrp имеет значение NULL.
[in] IgnoreBuffer
Задайте значение TRUE, чтобы игнорировать любые пользовательские буферы и принудительно переумеровать каталог. Это действие ускоряет операцию. Игнорируется, если NotifyIrp имеет значение NULL.
[in] CompletionFilter
Битовая маска флагов, указывающих типы изменений в файлах или подкаталогах, которые должны привести к завершению очереди ожидающих уведомлений IRP. В следующей таблице описаны возможные значения флагов.
Flag | Значение |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | Файл был добавлен, удален или переименован в этом каталоге. |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | Подкаталог был создан, удален или переименован. |
FILE_NOTIFY_CHANGE_NAME (0x0003) | Имя этого каталога изменилось. |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | Значение атрибута этого файла, например время последнего доступа, изменилось. |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | Размер этого файла изменился. |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | Время последнего изменения этого файла изменилось. |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | Время последнего доступа к этому файлу изменилось. |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | Время создания этого файла изменилось. |
FILE_NOTIFY_CHANGE_EA (0x0080) | Расширенные атрибуты этого файла были изменены. |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | Сведения о безопасности этого файла изменились. |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | Файловый поток добавлен, удален или переименован в этом каталоге. |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | Размер этого файлового потока изменился. |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | Данные этого потока файлов изменились. |
CompletionFilter игнорируется, если NotifyIrp имеет значение NULL.
[in, optional] NotifyIrp
Указатель на IRP для завершения при уведомлении об изменении. Если notifyIrp имеет значение 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. Параметр TraverseCallback игнорируется, если NotifyIrp имеет значение NULL.
[in, optional] SubjectContext
Указатель на структуру SECURITY_SUBJECT_CONTEXT , передаваемую в TraverseCallback. FsRtlNotifyFullChangeDirectory освобождает контекст и освобождает структуру после его использования. Игнорируется, если NotifyIrp имеет значение NULL. Если указана подпрограмма TraverseCallback , subjectContext передается в качестве параметра SubjectContext в эту подпрограмму.
Возвращаемое значение
None
Remarks
FsRtlNotifyFullChangeDirectory вызывается файловой системой, получившей запрос на уведомление об изменении. Этот запрос получается в виде IRP с основным кодом функции IRP_MJ_DIRECTORY_CONTROL, дополнительным кодом функции IRP_MN_NOTIFY_CHANGE_DIRECTORY.
Если notifyIrp имеет значение NULL, функция FsRtlNotifyFullChangeDirectory проверяет, содержит ли список уведомлений ожидающий IRP, ссылающийся на этот объект файла, и, если да, завершает его с помощью STATUS_DELETE_PENDING.
Если notifyIrp не равно NULL, FsRtlNotifyFullChangeDirectory выполняет следующие действия:
Проверяет, был ли объект файла очищен. Если да, FsRtlNotifyFullChangeDirectory завершает уведомление IRP с состоянием STATUS_NOTIFY_CLEANUP.
Если файловый объект не прошел очистку, FsRtlNotifyFullChangeDirectory проверяет, содержит ли список уведомлений для этого тома структуру уведомлений об этом изменении. Если это так, FsRtlNotifyFullChangeDirectory завершает все ожидающие IRP. В противном случае FsRtlNotifyFullChangeDirectory помечает IRP уведомления как ожидающее, создает структуру уведомлений и вставляет ее в список.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по