Макрос 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)

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

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT