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 成员将指示已成功处理的范围。 未处理 NumRangesProcessedFILE_LEVEL_TRIM 结构的 NumRanges 成员之间的任何范围。

FSCTL_FILE_LEVEL_TRIM控制代码与加密或压缩文件不兼容, (GetFileAttributes 返回FILE_ATTRIBUTE_ENCRYPTEDFILE_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)

另请参阅