FILE_NOTIFY_INFORMATION 结构 (ntifs.h)

FILE_NOTIFY_INFORMATION 描述对目录的更改。 当 DIRECTORY_NOTIFY_INFORMATION_CLASS 为 DirectoryNotifyInformation 时,它将返回用于响应具有 IRP_MN_NOTIFY_CHANGE_DIRECTORY 次要函数代码的 IRP_MJ_DIRECTORY_CONTROL 请求。

语法

typedef struct _FILE_NOTIFY_INFORMATION {
  ULONG NextEntryOffset;
  ULONG Action;
  ULONG FileNameLength;
  WCHAR FileName[1];
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;

成员

NextEntryOffset

必须跳过才能访问下一条记录的字节数。 值为零表示这是最后一条记录。

Action

发生的更改的类型。 此成员可以是以下值之一。

含义
FILE_ACTION_ADDED (0x00000001) 文件已添加到目录。
FILE_ACTION_REMOVED (0x00000002) 文件已从目录中删除。
FILE_ACTION_MODIFIED (0x00000003) 文件已修改。 这可以是时间戳或属性的更改。
FILE_ACTION_RENAMED_OLD_NAME (0x00000004) 文件已重命名,这是旧名称。
FILE_ACTION_RENAMED_NEW_NAME (0x00000005) 文件已重命名,这是新名称。
FILE_ACTION_ADDED_STREAM (0x00000006) 已将命名流添加到文件。
FILE_ACTION_REMOVED_STREAM (0x00000007) 已从文件中删除命名流。
FILE_ACTION_MODIFIED_STREAM (0x00000008) 已修改命名流。 修改可以是对命名流的数据或属性的更改。
FILE_ACTION_REMOVED_BY_DELETE (0x00000009) 删除了对象 ID,因为引用的对象 ID 的文件已被删除。 仅当受监视的目录是特殊目录“$Extend$ObjId:$O:$INDEX_ALLOCATION”时,才会发送此通知。
FILE_ACTION_ID_NOT_TUNNELLED (0x0000000A) 尝试将对象 ID 信息隧道传送到正在创建或重命名的文件失败,因为同一卷上的另一个文件正在使用对象 ID。 仅当受监视的目录是特殊目录“$Extend$ObjId:$O:$INDEX_ALLOCATION”时,才会发送此通知。
FILE_ACTION_TUNNELLED_ID_COLLISION (0x0000000B) 尝试将对象 ID 信息隧道传送到正在重命名的文件失败,因为该文件已具有对象 ID。 仅当受监视的目录是特殊目录“$Extend$ObjId:$O:$INDEX_ALLOCATION”时,才会发送此通知。

FileNameLength

记录的文件名部分的大小(以字节为单位)。 此值不包括终止 null 字符。

FileName[1]

一个长度可变的字段,其中包含相对于目录句柄的文件名。 文件名采用 Unicode 字符格式,不以 null 结尾。

如果文件同时具有短名称和长名称,则只返回其中一个名称,但未指定哪个名称。

要求

要求
最低受支持的客户端 Windows 10
标头 ntifs.h

另请参阅

DIRECTORY_NOTIFY_INFORMATION_CLASS

IRP_MJ_DIRECTORY_CONTROL

ZwNotifyChangeDirectoryFileEx