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 通訊協定 No
SMB 3.0 透明故障轉移 (TFO) No
具有向外延展檔案共用的SMB 3.0 (SO) No
叢集共用磁碟區文件系統 (CsvFS) 請參閱批注

只有在已掛接 NTFS 的節點上才支援 。

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
標頭 winioctl.h (包含 Windows.h)

另請參閱