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_MANAGEMENTMARK_HANDLE_PROTECT_CLUSTERS

要求

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

另请参阅