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_REASON_DATA_OVERWRITE 标志添加到 USN 记录。 但是,从用户的角度来看,数据并没有更改。 通过 记下 保存记录的 USN_RECORD 结构的 SourceInfo 成员中的 USN_SOURCE_DATA_MANAGEMENT ,可以确定尽管对项执行写入操作,但数据未更改。 |
|
该操作将专用数据流添加到文件或目录。
例如,病毒检测器添加校验和信息。 病毒检测器修改项时,系统会生成 USN 记录。 USN_SOURCE_AUXILIARY_DATA 指示修改未更改应用程序数据。 |
|
该操作创建或更新复制文件的内容。
例如,文件复制服务在复制目录中创建或更新文件时会设置此标志。 |
|
正在从云或服务器对客户端系统执行复制。 |
VolumeHandle
文件或目录所在的卷的卷句柄。 有关获取卷句柄的详细信息,请参阅备注部分。
需要此句柄来检查此操作的权限。
调用方必须具有 SE_MANAGE_VOLUME_NAME 权限。 有关详细信息,请参阅 权限。
HandleInfo
指定 VolumeHandle 成员中句柄值标识的文件或目录的其他信息的标志。
值 | 含义 |
---|---|
|
在关闭句柄之前,文件被标记为无法进行碎片整理。
关闭标记为 MARK_HANDLE_PROTECT_CLUSTERS 的句柄后,无法保证文件的群集不会移动。 |
|
在关闭句柄之前,文件被标记为无法进行碎片整理。
Windows Server 2003: 在 Windows Server 2003 SP1 之前,不支持此标志。 Windowsxp: 不支持此标志。 |
|
在关闭句柄之前,文件被标记为无法进行碎片整理。
Windows Server 2003: 在 Windows Server 2003 SP1 之前,不支持此标志。 Windowsxp: 不支持此标志。 |
|
无论实际文件类型如何,文件都会标记为实时读取行为。 必须打开标有此标志的文件才能进行 无缓冲区 I/O。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此标志。 |
|
以前使用 MARK_HANDLE_REALTIME 标志标记为实时读取行为的文件可以使用此标志取消标记,从而删除实时行为。 必须打开标有此标志的文件才能进行 无缓冲区 I/O。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此标志。 |
|
指示 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_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之前,不支持此标志。 |
|
将内存映射/缓存的 IO 与非缓存 IO 混合时,系统会尝试在发出非缓存 io 时清除非缓存 IO 范围的内存映射。 如果这些清除失败,则系统通常不会将故障返回给调用方,从而导致状态 (这就是文档) 不执行此操作的原因。 此标志告知系统返回给定句柄的清除失败,以便应用程序可以更好地处理这种情况 在Windows 8和Windows Server 2012之前,不支持此标志。 |
|
NTFS 中高度碎片的文件使用多个 MFT 记录来描述文件的所有盘区。 此子 MFT 记录列表 (也称为 FRS 记录) 由称为属性列表的结构控制。 属性列表的大小限制为 128K。 当属性列表的大小达到特定阈值时,NTFS 将在盘区上触发后台压缩,因此将使用最小数量的子 FRS 记录。
此标志禁用给定文件的此 FRS 压缩功能。
在Windows 10之前,不支持此标志。 |
|
告知 NTFS 在 USN 日记中对分页写入设置给定的 UsnSourceInfo 值。 传统上,这不会在分页写入上完成,因为系统不知道哪个线程进行了给定的更改。 这是一个替代。 仅当内存管理器正在使用的 FileObject 具有与此状态关联的时,此功能才有效。
在Windows 10之前,不支持此标志。 |
|
设置此标志会告知系统不允许对此文件进行写入。 如果应用程序尝试打开文件进行写入访问,则操作将失败并STATUS_ACCESS_DENIED。
如果出现写入,操作将失败并出现STATUS_MARKED_TO_DISALLOW_WRITES 在Windows 10之前,不支持此标志。 |
注解
若要检索卷的句柄,请调用 CreateFile ,并将 lpFileName 参数设置为以下格式的字符串:
“\.\X:”
在前面的字符串中, X 是标识卷所在的驱动器的字母。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | winioctl.h (包括 Windows.h) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈