Поделиться через


Функция 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. Если предоставляется подпрограмма TraverseCallback, SubjectContext передается в качестве параметра SubjectContext этой подпрограмме.

Возвращаемое значение

Никакой

Замечания

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 HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

См. также

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT