FSCTL_MOVE_FILE IOCTL (winioctl.h)

1 つの論理クラスターから同じボリューム内の別の論理クラスターに、ファイルの 1 つ以上の仮想クラスターを再配置します。 この操作は、最適化中に使用されます。

この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to volume
  FSCTL_MOVE_FILE,              // dwIoControlCode
  (LPVOID) lpInBuffer,          // MOVE_FILE_DATA structure
  (DWORD) nInBufferSize,        // size of input buffer
  NULL,                         // lpOutBuffer
  0,                            // nOutBufferSize
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

注釈

FSCTL_MOVE_FILE制御コードは、1 つの論理クラスターから同じボリューム内の別の論理クラスターに、ファイルの 1 つ以上の仮想クラスターを再配置します。 移動するファイルがスパース ファイルまたは圧縮ファイルの場合、移動の粒度は 16 個のクラスターです。それ以外の場合、粒度は 1 つのクラスターです。

開いているファイルが最適化されないようにマークするには、lpInBuffer パラメーターで渡されたMARK_HANDLE_INFO構造体の HandleInfo メンバーに MARK_HANDLE_PROTECT_CLUSTERS を指定して、FSCTL_MARK_HANDLEコントロール コードを使用して DeviceIoControl 関数を呼び出します。

FSCTL_GET_VOLUME_BITMAPコントロール コードを使用して DeviceIoControl 関数によって返されるビットマップは特定の時点を表し、ボリュームに書き込みアクティビティがある場合は読み取られた直後に正しくない可能性があることに注意してください。 したがって、クラスターが割り当てられていないことを示す最近のビットマップにもかかわらず、割り当てられたクラスターにクラスターを移動しようとする可能性があります。 FSCTL_MOVE_FILEを使用するプログラムは、この可能性のために準備する必要があります。

この操作に対する重複した I/O の影響については、 DeviceIoControl トピックの「解説」セクションを参照してください。

FSCTL_MOVE_FILEコントロール コードでサポートされているファイル、ストリーム、ストリームの種類の一覧については、「ファイルの最適化」トピックの「最適化にサポートされているファイル、ストリーム、ストリームの種類」セクション参照してください。

Windows 8とWindows Server 2012では、このコードは次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 Transparent Failover (TFO) いいえ
スケールアウト ファイル共有 (SO) を使う SMB 3.0 いいえ
クラスターの共有ボリューム ファイル システム (CsvFS) はい

必要条件

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

こちらもご覧ください