MARK_HANDLE_INFO 结构 (winioctl.h)

包含用于标记指定文件或目录及其更新序列号 (USN) 变更日志记录和有关更改的数据的信息。 它由 FSCTL_MARK_HANDLE 控件代码使用。

语法

typedef struct _MARK_HANDLE_INFO {
  union {
    DWORD UsnSourceInfo;
    DWORD CopyNumber;
  } DUMMYUNIONNAME;
  DWORD  UsnSourceInfo;
  HANDLE VolumeHandle;
  DWORD  HandleInfo;
} MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;

成员

DUMMYUNIONNAME

DUMMYUNIONNAME.UsnSourceInfo

DUMMYUNIONNAME.CopyNumber

UsnSourceInfo

所做更改的类型。

该操作不会从创建该文件的应用程序的角度在外部修改文件或目录。

当线程写入新的 USN 记录时,仅当线程也设置了这些标志时,上一条记录中的源信息标志才继续存在。 因此,源信息结构允许应用程序筛选出仅由已知源(如防病毒筛选器)设置的 USN 记录。

定义了以下值。

含义
USN_SOURCE_DATA_MANAGEMENT
0x00000001
该操作提供有关操作系统对文件或目录所做的更改的信息。

一个典型的用途是远程存储将数据从外部存储移动到本地存储。 远程存储是分层存储管理软件。 这种移动通常至少会将 USN_REASON_DATA_OVERWRITE 标志添加到 USN 记录。 但是,从用户的角度来看,数据并没有更改。 通过 记下 保存记录的 USN_RECORD 结构的 SourceInfo 成员中的 USN_SOURCE_DATA_MANAGEMENT ,可以确定尽管对项执行写入操作,但数据未更改。

USN_SOURCE_AUXILIARY_DATA
0x00000002
该操作将专用数据流添加到文件或目录。

例如,病毒检测器添加校验和信息。 病毒检测器修改项时,系统会生成 USN 记录。 USN_SOURCE_AUXILIARY_DATA 指示修改未更改应用程序数据。

USN_SOURCE_REPLICATION_MANAGEMENT
0x00000004
该操作创建或更新复制文件的内容。

例如,文件复制服务在复制目录中创建或更新文件时会设置此标志。

USN_SOURCE_CLIENT_REPLICATION_MANAGEMENT
0x00000008
正在从云或服务器对客户端系统执行复制。

VolumeHandle

文件或目录所在的卷的卷句柄。 有关获取卷句柄的详细信息,请参阅备注部分。

需要此句柄来检查此操作的权限。

调用方必须具有 SE_MANAGE_VOLUME_NAME 权限。 有关详细信息,请参阅 权限

HandleInfo

指定 VolumeHandle 成员中句柄值标识的文件或目录的其他信息的标志。

含义
MARK_HANDLE_PROTECT_CLUSTERS
0x00000001
在关闭句柄之前,文件被标记为无法进行碎片整理。

关闭标记为 MARK_HANDLE_PROTECT_CLUSTERS 的句柄后,无法保证文件的群集不会移动。

MARK_HANDLE_TXF_SYSTEM_LOG
0x00000004
在关闭句柄之前,文件被标记为无法进行碎片整理。

Windows Server 2003: 在 Windows Server 2003 SP1 之前,不支持此标志。

Windowsxp: 不支持此标志。

MARK_HANDLE_NOT_TXF_SYSTEM_LOG
0x00000008
在关闭句柄之前,文件被标记为无法进行碎片整理。

Windows Server 2003: 在 Windows Server 2003 SP1 之前,不支持此标志。

Windowsxp: 不支持此标志。

MARK_HANDLE_REALTIME
0x00000020
无论实际文件类型如何,文件都会标记为实时读取行为。 必须打开标有此标志的文件才能进行 无缓冲区 I/O

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此标志。

MARK_HANDLE_NOT_REALTIME
0x00000040
以前使用 MARK_HANDLE_REALTIME 标志标记为实时读取行为的文件可以使用此标志取消标记,从而删除实时行为。 必须打开标有此标志的文件才能进行 无缓冲区 I/O

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此标志。

MARK_HANDLE_READ_COPY
0x00000080
指示 CopyNumber 成员中指定的副本编号应用于读取。 必须打开标有此标志的文件才能进行 无缓冲区 I/O

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 在Windows 8和Windows Server 2012之前,不支持此标志。

MARK_HANDLE_NOT_READ_COPY
0x00000100
以前使用 MARK_HANDLE_READ_COPY 标志标记读取复制行为的文件可以使用此标志取消标记,从而删除读取-复制行为。 必须打开标有此标志的文件才能进行 无缓冲区 I/O

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 在Windows 8和Windows Server 2012之前,不支持此标志。

MARK_HANDLE_RETURN_PURGE_FAILURE
0x00000400
将内存映射/缓存的 IO 与非缓存 IO 混合时,系统会尝试在发出非缓存 io 时清除非缓存 IO 范围的内存映射。 如果这些清除失败,则系统通常不会将故障返回给调用方,从而导致状态 (这就是文档) 不执行此操作的原因。 此标志告知系统返回给定句柄的清除失败,以便应用程序可以更好地处理这种情况

在Windows 8和Windows Server 2012之前,不支持此标志。

MARK_HANDLE_DISABLE_FILE_METADATA_OPTIMIZATION
0x00001000
NTFS 中高度碎片的文件使用多个 MFT 记录来描述文件的所有盘区。 此子 MFT 记录列表 (也称为 FRS 记录) 由称为属性列表的结构控制。 属性列表的大小限制为 128K。 当属性列表的大小达到特定阈值时,NTFS 将在盘区上触发后台压缩,因此将使用最小数量的子 FRS 记录。 此标志禁用给定文件的此 FRS 压缩功能。

在Windows 10之前,不支持此标志。

MARK_HANDLE_ENABLE_USN_SOURCE_ON_PAGING_IO
0x00002000
告知 NTFS 在 USN 日记中对分页写入设置给定的 UsnSourceInfo 值。 传统上,这不会在分页写入上完成,因为系统不知道哪个线程进行了给定的更改。 这是一个替代。 仅当内存管理器正在使用的 FileObject 具有与此状态关联的时,此功能才有效。

在Windows 10之前,不支持此标志。

MARK_HANDLE_SKIP_COHERENCY_SYNC_DISALLOW_WRITES
0x00004000
设置此标志会告知系统不允许对此文件进行写入。 如果应用程序尝试打开文件进行写入访问,则操作将失败并STATUS_ACCESS_DENIED。 如果出现写入,操作将失败并出现STATUS_MARKED_TO_DISALLOW_WRITES

在Windows 10之前,不支持此标志。

注解

若要检索卷的句柄,请调用 CreateFile ,并将 lpFileName 参数设置为以下格式的字符串:

“\.\X:”

在前面的字符串中, X 是标识卷所在的驱动器的字母。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winioctl.h (包括 Windows.h)

另请参阅

FSCTL_MARK_HANDLE

USN_RECORD