RtlCompressBuffer 関数 (ntifs.h)
RtlCompressBuffer 関数はバッファーを圧縮し、ファイル システム ドライバーがファイル圧縮の実装を容易にするために使用できます。
構文
NT_RTL_COMPRESS_API NTSTATUS RtlCompressBuffer(
[in] USHORT CompressionFormatAndEngine,
[in] PUCHAR UncompressedBuffer,
[in] ULONG UncompressedBufferSize,
[out] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG UncompressedChunkSize,
[out] PULONG FinalCompressedSize,
[in] PVOID WorkSpace
);
パラメーター
[in] CompressionFormatAndEngine
圧縮形式とエンジンの種類を指定するビットマスク。 このパラメーターは、1 つのフォーマット・タイプと 1 つのエンジン・タイプの有効なビットごとの OR 組み合わせに設定する必要があります。 たとえば、COMPRESSION_FORMAT_LZNT1 |COMPRESSION_ENGINE_STANDARD。
これらの意味、およびその他の関連する値は次のとおりです。
値 | 意味 |
---|---|
COMPRESSION_FORMAT_NONE | この関数ではサポートされていません。 |
COMPRESSION_FORMAT_DEFAULT | この関数ではサポートされていません。 |
COMPRESSION_FORMAT_LZNT1 | 関数は LZ 圧縮を実行します。 |
COMPRESSION_FORMAT_XPRESS | 関数は Xpress 圧縮を実行します。 |
COMPRESSION_FORMAT_XPRESS_HUFF | 関数は Xpress Huffman 圧縮を実行します。 |
COMPRESSION_ENGINE_STANDARD | 非圧縮バッファー バッファーは、データ圧縮とパフォーマンスのバランスを取るアルゴリズムを使用して圧縮されます。 この値は、COMPRESSION_ENGINE_MAXIMUMでは使用できません。 |
COMPRESSION_ENGINE_MAXIMUM | 非圧縮バッファー バッファーは、最大データ圧縮を提供するが、パフォーマンスは比較的遅いアルゴリズムを使用して圧縮されます。 この値は、COMPRESSION_ENGINE_STANDARDでは使用できません。 |
COMPRESSION_ENGINE_HIBER | この関数ではサポートされていません。 |
[in] UncompressedBuffer
圧縮するデータを含む呼び出し元によって割り当てられたバッファー (ページプールまたは非ページ プールから割り当てられる) へのポインター。 このパラメーターは必須であり、NULL にすることはできません。
[in] UncompressedBufferSize
非圧縮バッファー バッファーのサイズ (バイト単位)。
[out] CompressedBuffer
圧縮されたデータを受け取る呼び出し元によって割り当てられたバッファー (ページプールまたは非ページ プールから割り当てられる) へのポインター。 このパラメーターは必須であり、NULL にすることはできません。
[in] CompressedBufferSize
CompressedBuffer バッファーのサイズ (バイト単位)。
[in] UncompressedChunkSize
圧縮されていないバッファーを圧縮するときに使用するチャンク サイズ。 このパラメーターは、512、1024、2048、または 4096 のいずれかの値である必要があります。 オペレーティング システムでは 4096 が使用され、このパラメーターの推奨値も 4096 です。
[out] FinalCompressedSize
CompressedBuffer に格納されている圧縮データのサイズ (バイト単位) を受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは必須であり、NULL にすることはできません。
[in] WorkSpace
圧縮時に RtlCompressBuffer 関数によって使用される呼び出し元によって割り当てられた作業空間バッファーへのポインター。 RtlGetCompressionWorkSpaceSize 関数を使用して、正しい作業スペース バッファー サイズを決定します。
戻り値
RtlCompressBuffer は 、次のいずれかの適切なエラー状態値を返します。
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | 非圧縮バッファー バッファーが正常に圧縮されました。 |
STATUS_BUFFER_ALL_ZEROS | 非圧縮バッファー バッファーは正常に圧縮されましたが、このバッファーには 0 のみが含まれています。 |
STATUS_INVALID_PARAMETER | CompressionFormat パラメーターを使用して、無効な圧縮形式が指定されました。 CompressionFormat がCOMPRESSION_FORMAT_NONEまたはCOMPRESSION_FORMAT_DEFAULT (両方ではない) の場合は、この値が返されます。 |
STATUS_UNSUPPORTED_COMPRESSION | CompressionFormat パラメーターを使用して、無効な圧縮形式が指定されました。 CompressionFormat が次のいずれかでない場合は、STATUS_UNSUPPORTED_COMPRESSIONが返されます: COMPRESSION_FORMAT_LZNT1、COMPRESSION_FORMAT_XPRESS、COMPRESSION_FORMAT_XPRESS_HUFF |
STATUS_NOT_SUPPORTED | CompressionFormatAndEngine パラメーターを使用して、無効な圧縮エンジンが指定されました。 CompressionFormatAndEngine がCOMPRESSION_ENGINE_STANDARDまたはCOMPRESSION_ENGINE_MAXIMUM (両方ではない) 場合は、この値が返されます。 |
STATUS_BUFFER_TOO_SMALL | 圧縮バッファーが小さすぎて、圧縮データを保持できません。 つまり、 FinalCompressedSize は CompressedBufferSize より大きくなります。 |
注釈
RtlCompressBuffer 関数は、圧縮されていないバッファーを入力として受け取り、圧縮されたデータが指定された宛先バッファー内に収まる場合は、圧縮された同等の値を生成します。
WorkSpace パラメーターの正しいバッファー サイズを確認するには、RtlGetCompressionWorkSpaceSize 関数を使用します。
圧縮バッファーを圧縮解除するには、 RtlDecompressBuffer 関数を 使用します。
圧縮バッファーから圧縮されていないフラグメントを抽出するには、 RtlDecompressFragment 関数を使用します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP |
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Fltkernel.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示