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 之前不支持此标志。

Windows XP:不支持 此标志。

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

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

Windows XP:不支持 此标志。

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 Journal 中对分页写入设置给定的 UsnSourceInfo 值。 传统上,这在分页写入上没有完成,因为系统不知道哪个线程进行了给定的更改。 这是一个替代。 仅当内存管理器正在使用的 FileObject 具有与此状态关联的时才有效。

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

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

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

言论

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

“\\.\X:”

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

要求

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

另请参阅

FSCTL_MARK_HANDLE

USN_RECORD