Функция 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
Битовая маска флагов, указывающая типы изменений в файлах или подкаталогах, которые должны привести к завершению очереди ожидающих уведомлений irPs. В следующей таблице описаны возможные значения флагов.
Флаг | Значение |
---|---|
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) | Изменены данные этого потока файлов. |
ЗавершениеFilter игнорируется, если 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 см. в параметре TargetContextFsRtlNotifyFullReportChange. TraverseCallback игнорируется, если NotifyIrp имеет значение NULL.
[in, optional] SubjectContext
Указатель на структуру SECURITY_SUBJECT_CONTEXT, передаваемую TraverseCallback.
FsRtlNotifyFullChangeDirectory освобождает контекст и освобождает структуру после его использования. Игнорируется, если NotifyIrp имеет значение NULL. Если предоставляется подпрограмма
Возвращаемое значение
Никакой
Замечания
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 завершает все ожидающие irPs. В противном случае FsRtlNotifyFullChangeDirectory помечает уведомление IRP как ожидающий, создает структуру уведомлений и вставляет ее в список.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
правил соответствия DDI |