FSCTL_FILE_LEVEL_TRIM IOCTL (winioctl.h)
指示指定文件中不需要由存储系统存储的范围。
若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。
BOOL DeviceIoControl(
(HANDLE) hDevice, // Handle to a file
FSCTL_FILE_LEVEL_TRIM, // dwIoControlCode
(LPVOID) lpInBuffer, // Input buffer
(DWORD) nInBufferSize, // Size of input buffer
(LPVOID) lpOutBuffer, // Output buffer
(DWORD) nOutBufferSize, // Size of output buffer
(LPDWORD) lpBytesReturned, // Number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
注解
FSCTL_FILE_LEVEL_TRIM控制代码是基础存储系统的提示。 当一个字节范围已修整后,如果稍后再次读取该范围,则返回的数据可能是剪裁操作之前的原始数据-) 所有零 (0x00 字节,所有 (0xff 字节) ,或者这些数据的组合。 在将剪裁操作传递到基础存储系统之前,将缩小输入范围以与页面边界保持一致, (32 位和基于 x64 的 Windows 版本上的 4,096 个字节,Itanium-Based 版本的 Windows) 上为 8,192 个字节。
如果在处理 lpInBuffer 参数指向的输入缓冲区中FILE_LEVEL_TRIM结构的FILE_LEVEL_TRIM_RANGE项时出错,则处理将停止,lpOutBuffer 参数指向的FILE_LEVEL_TRIM_OUTPUT结构的 NumRangesProcessed 成员将指示已成功处理的范围。 未处理 NumRangesProcessed 和 FILE_LEVEL_TRIM 结构的 NumRanges 成员之间的任何范围。
FSCTL_FILE_LEVEL_TRIM控制代码与加密或压缩文件不兼容, (GetFileAttributes 返回FILE_ATTRIBUTE_ENCRYPTED或FILE_ATTRIBUTE_COMPRESSED) ,并且会失败并出现ERROR_INVALID_PARAMETER。 支持 (FILE_ATTRIBUTE_SPARSE_FILE) 指示的稀疏文件,但只能剪裁已分配的范围。 支持 BitLocker 技术加密的卷上的文件,而不支持单独加密的文件。
FSCTL_FILE_LEVEL_TRIM控制代码不参与事务。 如果在事务期间处理 FSCTL_FILE_LEVEL_TRIM 控制代码,并且该事务被中止,则不会随事务一起回滚剪裁。
成功剪裁的区域将从文件系统缓存中删除。
修整的范围可能超出 VDL) 的有效数据长度 (,一直 (EOF) 。
在Windows 8和Windows Server 2012中,以下技术支持此代码。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 否 |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
标头 | winioctl.h (包括 Windows.h) |