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 メンバーを 0 に設定します。 この呼び出しが成功した場合、ファイルシステムは新しいボリューム長の末尾を超えてクラスターを割り当てません。
  3. 新しいセクター数を超えるすべてのファイルに対して FSCTL_MOVE_FILE を呼び出し、有効な範囲内に移動します。 圧縮操作の影響を受けるすべてのファイルを移動する必要があります。
  4. FSCTL_SHRINK_VOLUMEを呼び出します。 SHRINK_VOLUME_INFORMATION構造体の ShrinkRequestType メンバーを ShrinkCommit に設定します。 同じ構造体の NewNumberOfSectors メンバーを 0 に設定します。 新しいボリューム サイズの末尾を超えるすべてのファイルが移動されていない場合、呼び出しは 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 Transparent Failover (TFO) いいえ
スケールアウト ファイル共有 (SO) を使う SMB 3.0 いいえ
クラスターの共有ボリューム ファイル システム (CsvFS) コメントを表示する

NTFS がマウントされているノードでのみサポートされます。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
Header winioctl.h (Windows.h を含む)

こちらもご覧ください