FSCTL_SHRINK_VOLUME IOCTL (winioctl.h)

表示卷已准备好执行收缩操作、将提交收缩操作或将终止收缩操作。

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to device
  FSCTL_SHRINK_VOLUME,          // dwIoControlCode
  (LPVOID) lpInBuffer,          // input buffer
  nInBufferSize,                // size of input buffer    
  NULL,                         // output buffer
  O,                            // size of output buffer
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

注解

此控制代码仅在 NTFS 和 RAW 文件系统上受支持。

若要完成收缩操作,必须:

  1. 调用 CreateFile 以打开卷的句柄。
  2. 调用 FSCTL_SHRINK_VOLUME。 将 SHRINK_VOLUME_INFORMATION 结构的 ShrinkRequestType 成员设置为 ShrinkPrepare。 将同一结构的 NewNumberOfSectors 成员设置为零。 如果此调用成功,则文件系统不会分配超过新卷长度末尾的群集。
  3. 对超出新扇区数的所有文件调用 FSCTL_MOVE_FILE ,并将其移动到有效范围内。 你负责移动受收缩操作影响的任何文件。
  4. 调用 FSCTL_SHRINK_VOLUME。 将 SHRINK_VOLUME_INFORMATION 结构的 ShrinkRequestType 成员设置为 ShrinkCommit。 将同一结构的 NewNumberOfSectors 成员设置为零。 如果未移动超出新卷大小末尾的所有文件,则调用将失败 ,STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED) 。 否则,文件系统现已收缩。
  5. 调用 IOCTL_DISK_GROW_PARTITION。 将 DISK_GROW_PARTITION 结构的 BytesToGrow 成员设置为表示要删除的字节数的负数。

在Windows 8和Windows Server 2012中,以下技术支持此代码。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV) 查看注释

仅在装载了 NTFS 的节点上受支持。

要求

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

另请参阅