FSCTL_QUERY_ALLOCATED_RANGES IOCTL (winioctl.h)
ファイルまたは代替ストリームをスキャンして、0 以外のデータを含む可能性のある範囲を探します。 オペレーティング システムに認識されるゼロの範囲を持つことができるのは、圧縮ファイルまたはスパース ファイルだけです。 その他のファイルの場合、出力バッファーには、開始点と要求された長さを含む 1 つのエントリのみが含まれます。
この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file
FSCTL_QUERY_ALLOCATED_RANGES, // 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
);
注釈
この操作に対する重複した I/O の影響については、 DeviceIoControl の「解説」セクションを参照してください。
NTFS ファイル システムは、入力ファイルのオフセットを便利な境界と長さを便利な境界まで切り捨て、ファイルのウォークスルーを開始します。
オペレーティング システムは、ゼロ (0) または 0 以外のデータのすべての部分を追跡するわけではありません。 ゼロ (0) は、多くの場合、完全に法的なデータであるため、誤解を招く可能性があります。 代わりに、システムはディスク領域が割り当てられている範囲を追跡します。 ディスク領域が割り当てられていない場合、すべてのデータはゼロ (0) と見なされます。 割り当てられたストレージには、ゼロ (0) または 0 以外のデータを含めることができます。 したがって、この操作は、0 以外のデータが存在する可能性があるファイルの一部に関する情報を返します。 アプリケーションのデータ規則に従ってファイルのこれらの部分をスキャンするのはアプリケーションの責任です。
出力配列内の各エントリには、0 以外のデータを含む可能性があるファイル内の範囲を示すオフセットと長さが含まれています。 実際の 0 以外のデータがある場合は、この範囲内のどこかに存在し、呼び出し元のプログラムは範囲内をさらにスキャンして検索し、実際に有効なデータかどうかを判断する必要があります。 有効なデータの複数のインスタンスが範囲内に存在する可能性があります。
割り当てられた範囲は、メモリマップされたリモート(ネットワーク)ファイルとファイルへのオープンハンドルが必ずしも一貫性がないという規則の対象となります。 メモリがスパース ネットワーク ファイルをマップし、ファイルの以前に割り当てられていない領域に 0 以外のデータを書き込んだ場合は、新しいデータにディスク領域が割り当てられます。 ただし、その後 FSCTL_QUERY_ALLOCATED_RANGES を呼び出すと、割り当てられたリージョンの正しいリストが必ずしも返されるとは限りません。 ビュー メモリとファイル ハンドルの間の一貫性を確保するには、 FlushViewOfFile 関数を使用してデータをファイルにフラッシュします。
Windows 8とWindows Server 2012では、このコードは次のテクノロジでサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | いいえ |
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
Header | winioctl.h (Windows.h を含む) |