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 文件系统上受支持。
若要完成收缩操作,必须:
- 调用 CreateFile 以打开卷的句柄。
- 调用 FSCTL_SHRINK_VOLUME。 将 SHRINK_VOLUME_INFORMATION 结构的 ShrinkRequestType 成员设置为 ShrinkPrepare。 将同一结构的 NewNumberOfSectors 成员设置为零。 如果此调用成功,则文件系统不会分配超过新卷长度末尾的群集。
- 对超出新扇区数的所有文件调用 FSCTL_MOVE_FILE ,并将其移动到有效范围内。 你负责移动受收缩操作影响的任何文件。
- 调用 FSCTL_SHRINK_VOLUME。 将 SHRINK_VOLUME_INFORMATION 结构的 ShrinkRequestType 成员设置为 ShrinkCommit。 将同一结构的 NewNumberOfSectors 成员设置为零。 如果未移动超出新卷大小末尾的所有文件,则调用将失败 ,STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED) 。 否则,文件系统现已收缩。
- 调用 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) |