FSCTL_MARK_HANDLE IOCTL (winioctl.h)
使用有关指定文件或目录的更改的信息,来标记该文件或目录及其变更日志记录。
若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file or directory
FSCTL_MARK_HANDLE, // dwIoControlCode
(LPVOID)lpInBuffer, // input buffer
(DWORD)nInBufferSize, // size of input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
注解
有关重叠 I/O 对此操作的影响,请参阅 DeviceIoControl 主题的“备注”部分。
FSCTL_MARK_HANDLE 是唯一对单个文件或目录执行的更改日志操作。 它不会影响用户可以对项执行的任何操作。 相反,它会向文件或目录添加信息,提供操作系统如何更改项或向项添加专用数据流的信息。
如果对文件或目录有任何更改,则使用 FSCTL_MARK_HANDLE 添加的信息也会复制到为文件或目录创建的 USN 记录中。 请注意,这两个操作可以相互独立发生,例如,USN 记录不必存在即可将文件标记为无法进行碎片整理,也无需标记文件或目录即可更新相应 USN 记录的内容。 有关 FSCTL_MARK_HANDLE 可以标记项的信息的详细信息, (请参阅 MARK_HANDLE_INFO 以获取) 的详细信息。
当卷的更改日志被删除或处于非活动状态时,使用 FSCTL_MARK_HANDLE 不是错误。 无论更改日志的状态如何,只要更改日志存在,相应的信息都会应用于文件或目录。
请注意,可能无法正确更新远程文件的时间戳。 若要确保结果一致,请使用非缓冲区 I/O。
卷必须为 NTFS。
在Windows 8和Windows Server 2012中,以下技术支持此代码。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 否 |
SMB 3.0 透明故障转移 (TFO) | 否 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 否 |
群集共享卷文件系统 (CSV) | 是 |
CsvFs 始终针对符合直接 IO 条件的文件发出 USN_SOURCE_REPLICATION_MANAGEMENT 和 MARK_HANDLE_PROTECT_CLUSTERS 。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | winioctl.h (包括 Windows.h) |