FSCTL_GET_VOLUME_BITMAP IOCTL (winioctl.h)
ボリューム上の占有され使用可能なクラスターのビットマップを取得します。
この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to volume
FSCTL_GET_VOLUME_BITMAP, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
注釈
FSCTL_GET_VOLUME_BITMAP制御コードは、要求された開始 LCN からボリューム上の最後のクラスターへのファイル システム内の各クラスターの割り当て状態を記述するデータ構造を取得します。 ビットマップは、各クラスターを表すために 1 ビットを使用します。
- 値 1 は、クラスターが割り当てられている (使用中) ことを示します。
- 値 0 は、クラスターが割り当てられない (空き) ことを示します。
ビットマップは特定の時点を表し、ボリュームに書き込みアクティビティがある場合は読み取られた直後に正しくない可能性があることに注意してください。 したがって、クラスターが割り当てられていないことを示す最近のビットマップにもかかわらず、割り当てられたクラスターにクラスターを移動しようとする可能性があります。 FSCTL_MOVE_FILE制御コードで DeviceIoControl 関数を使用するプログラムは、この可能性のために準備する必要があります。
ここで使用するハンドルはボリューム ハンドルである必要があり、任意のアクセス権で開かれています。 ボリューム ハンドルを開くことができるのは管理者のみです。
入力バッファー内の開始 LCN は、ビットマップが計算される前に切り捨てられます。 丸め制限はファイル システムによって異なります。
この操作に対する重複した I/O の影響については、 DeviceIoControl トピックの「解説」セクションを参照してください。
この操作により、返されるビットマップがページ境界上に配置されます。
Windows Server 2003 および Windows XP: この操作は、返されるビットマップをバイト境界に合わせます。
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 を含む) |