FSCTL_OFFLOAD_WRITE控制代码为支持卸载写入基元的存储系统中的数据块启动卸载写入。
若要执行此作,微型筛选器驱动程序使用以下参数调用 FltFsControlFile ,以及文件系统、重定向器和旧文件系统筛选器驱动程序使用以下参数调用 ZwFsControlFile 。
参数
实例 [in]: 仅 FltFsControlFile 。 调用方不透明的实例指针。 此参数是必需的,不能为 NULL。
FileObject [in]: FltFsControlFile 。 指定要写入的文件的文件指针对象。 此参数是必需的,不能为 NULL。
FileHandle [in]: ZwFsControlFile 。 要写入的文件的文件句柄。 此参数是必需的,不能为 NULL。
FsControlCode [in]:作的控件代码。 对此作使用 FSCTL_OFFLOAD_WRITE 。
InputBuffer [in]:指向 FSCTL_OFFLOAD_WRITE_INPUT 结构的指针,其中包含要读取的数据块的大小和偏移量。
InputBufferLength [in]: InputBuffer 指向的缓冲区的大小(以字节为单位)。 此值为 sizeof(FSCTL_OFFLOAD_WRITE_INPUT)。
OutputBuffer [out]:指向 FSCTL_OFFLOAD_WRITE_INPUT 结构的指针,其中包含要读取的数据块的大小和偏移量。
OutputBufferLength [out]: OutputBuffer 参数指向的缓冲区的大小(以字节为单位)。 此值必须至少 为 sizeof(FSCTL_OFFLOAD_READ_OUTPUT)。
状态块
如果作成功,FltFsControlFile 或 ZwFsControlFile 将返回STATUS_SUCCESS。 否则,相应的函数可能会返回以下 NTSTATUS 值之一。
| Code | Meaning |
|---|---|
| STATUS_INVALID_DEVICE_REQUEST | 指定的句柄不是有效的文件句柄。 |
| STATUS_INVALID_PARAMETER | 参数无效。 请参阅“备注”。 |
| STATUS_NOT_SUPPORTED | 此卷不支持卸载读取作。 |
| STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED | 不支持请求的文件类型。 这些文件类型不支持卸载作:事务处理文件(TxF);非用户文件;压缩文件;加密文件;稀疏文件;NTFS 元数据文件。 |
| STATUS_TOO_LATE | 卸载卷后,尝试对卷执行写入作。 |
| STATUS_FILE_DELETED | 此文件的数据流无效。 |
| STATUS_FILE_CLOSED | 文件句柄已关闭。 |
| STATUS_INVALID_HANDLE | 指定的文件句柄无效。 |
| STATUS_FILE_LOCK_CONFLICT | 由于当前文件锁定状态,无法授予读取或写入访问权限。 |
| STATUS_END_OF_FILE | FSCTL_OFFLOAD_WRITE_INPUT的 FileOffset 成员在文件结束后开始(EOF)。 |
| STATUS_DISMOUNTED_VOLUME | 卸载的卷上无法发生卸载写入。 |
| STATUS_MEDIA_WRITE_PROTECTED | 卷为只读。 |
| STATUS_INSUFFICIENT_RESOURCES | 资源不足,无法完成请求。 |
| STATUS_BUFFER_TOO_SMALL | InputBufferLength 太小,无法输入Buffer 包含FSCTL_OFFLOAD_WRITE_INPUT结构,或者 OutputBufferLength 太小,无法接收FSCTL_OFFLOAD_WRITE_OUTPUT结构。 |
注解
卸载读取仅适用于普通文件。 有关不受支持的文件类型列表 ,请参阅有关STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED 的说明。
返回STATUS_INVALID_PARAMETER时,错误可能是以下无效参数之一:
- 文件大小小于PAGE_SIZE。
-
InputBufferLength<
sizeof(FSCTL_OFFLOAD_READ_OUTPUT)。 - FSCTL_OFFLOAD_WRITE_INPUT的其中 一个或多个成员不正确: FileOffset 不是卷的逻辑扇区大小的倍数。 CopyLength 不是卷的逻辑扇区大小的倍数。 TransferOffset 不是卷的逻辑扇区大小的倍数。 大小 不是FSCTL_OFFLOAD_WRITE_INPUT 结构的大小。 FileOffset> 文件的有效数据长度(VDL)。 FileOffset + CopyLength>MAXULONGLONG。
要求
| 要求类型 | Requirement |
|---|---|
| 最低受支持的客户端 | Windows 8操作系统 |
| Header | Ntifs.h (包括 Ntifs.h 或 Fltkernel.h) |