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 之前不支持此标志。 Windows XP:不支持 此标志。 |
|
文件被标记为在句柄关闭之前无法进行碎片整理。
Windows Server 2003:WINDOWS Server 2003 SP1 之前不支持此标志。 Windows XP:不支持 此标志。 |
|
无论实际文件类型如何,文件都标记为实时读取行为。 标记为此标志的文件必须打开 无缓冲区 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 Journal 中对分页写入设置给定的 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) |