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 通訊協定 | No |
SMB 3.0 透明故障轉移 (TFO) | No |
具有向外延展檔案共用的SMB 3.0 (SO) | No |
叢集共用磁碟區文件系統 (CsvFS) | 請參閱批注 |
只有在已掛接 NTFS 的節點上才支援 。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
標頭 | winioctl.h (包含 Windows.h) |