Функция 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)

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

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT