FSCTL_REARRANGE_FILE IOCTL (ntifs.h)

FSCTL_REARRANGE_FILE 重新排列文件中的分配,将群集从文件中请求的连续源范围移动到同一文件中的另一个位置。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

指向描述要重新排列的分配的 REARRANGE_FILE_DATA 结构的指针。 (对于 32 位调用方,输入缓冲区是指向 REARRANGE_FILE_DATA32 结构的指针。

输入缓冲区长度

输入缓冲区的大小(以字节为单位)。

输出缓冲区

没有;设置为 NULL。

输出缓冲区长度

设置为零。

状态块

返回值

成功完成后,FSCTL_REARRANGE_FILE 返回STATUS_SUCCESS;否则,它将返回 NTSTATUS 代码,例如以下代码之一。

返回代码 意义
STATUS_ACCESS_DENIED 仅允许内核模式调用。
STATUS_BUFFER_TOO_SMALL 指定的输入缓冲区长度小于 sizeof(REARRANGE_FILE_DATA)。
STATUS_PENDING 操作完成挂起。

言论

请求参数 包含源和目标文件字节偏移量,以及要移动的源区域的长度(以字节为单位),所有这些参数都必须是群集对齐的。

  • 如果向下移动群集,则目标文件偏移量指示移动源范围的下限应对齐的点。
  • 如果向上移动群集,则目标文件偏移量指示源范围的上限应对齐的点。

在这两种情况下,目标偏移量都表示源范围应在从目标偏移点开始的群集之前插入,这两种区别是由分配大小保持固定的约束所强制的。

FSCTL_SHUFFLE_FILE不同,FSCTL_REARRANGE_FILE 不允许添加包含随机数据的分配。

若要执行此操作,请使用以下参数调用 FltFsControlFileZwFsControlFile

参数 描述
实例 [in]仅适用于 FltFsControlFile。 调用方不透明的实例指针。 此参数是必需的,不能为 NULL。
FileObject [in]仅适用于 FltFsControlFile。 作为此请求目标的文件或目录的文件对象指针。 此参数是必需的,不能为 NULL。
FileHandle [in]仅适用于 ZwFsControlFile。 此请求的目标文件或目录的文件句柄。 此参数是必需的,不能为 NULL。
IoStatusBlock [out]仅适用于 ZwFsControlFile。 指向包含请求最终状态的 IO_STATUS_BLOCK 结构的指针。
FsControlCode [in]设置为 FSCTL_REARRANGE_FILE
InputBuffer [in]请参阅 IOCTL 参数。
InputBufferLength [in]请参阅 IOCTL 参数。

要求

要求 价值
最低支持的客户端 Windows 10 版本 1809
标头 ntifs.h

另请参阅

FltFsControlFile

FSCTL_SHUFFLE_FILE

REARRANGE_FILE_DATA

ZwFsControlFile