Макрос FsRtlNotifyFullChangeDirectory (rxprocs.h)
Подпрограмма FsRtlNotifyFullChangeDirectory создает структуру уведомлений для запроса на уведомление и добавляет ее в указанный список уведомлений.
Синтаксис
void FsRtlNotifyFullChangeDirectory(
A1,
A2,
A3,
A4,
A5,
A6,
A7,
A8,
A9,
A10
);
Параметры
A1
Указатель на непрозрачный объект синхронизации для списка уведомлений для текущего тома.
A2
Указатель на заголовок списка уведомлений. Каждый элемент в списке является непрозрачной структурой уведомления.
A3
Указатель на уникальное значение, присвоенное файловой системой для идентификации создаваемой структуры уведомления как принадлежащей определенному объекту файла. Если указана подпрограмма TraverseCallback , FsContext передается в качестве параметра NotifyContext этой подпрограмме.
A4
Указатель на строку ANSI или Юникода, содержащую полное имя каталога, связанного с этой структурой уведомлений. Игнорируется, если NotifyIrp имеет значение NULL.
A5
Установите значение TRUE , если все подкаталоги этого каталога также должны отслеживаться. Установите значение FALSE , если необходимо отслеживать только сам каталог. Игнорируется, если NotifyIrp имеет значение NULL.
A6
Задайте значение TRUE , чтобы игнорировать любые пользовательские буферы и принудительно переумеровать каталог. Это действие ускоряет операцию. Игнорируется, если NotifyIrp имеет значение NULL.
A7
Битовая маска флагов, указывающих типы изменений в файлах или подкаталогах, которые должны привести к завершению очереди ожидающих уведомлений IRP. Возможные значения флагов описаны ниже.
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 |
Данные этого потока файлов изменились. |
CompletionFilter игнорируется, если NotifyIrp имеет значение NULL.
A8
Указатель на IRP для завершения при уведомлении об изменении. Если notifyIrp имеет значение NULL, это означает, что файловый поток, представленный этим объектом файла, удаляется.
A9
Необязательный указатель на подпрограмму обратного вызова, вызываемую при изменении в подкаталоге, отслеживаемом в дереве каталогов. Это позволяет файловой системе проверка, имеет ли наблюдатель доступ к этому каталогу. Такая подпрограмма, предоставляемая вызывающим абонентом, объявляется следующим образом:
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.
A10
Указатель на структуру контекста, передаваемую в 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 уведомления как ожидающее, создает структуру уведомлений и вставляет ее в список.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | rxprocs.h (включая Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |