次の方法で共有


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 圧縮バッファーが小さすぎて、圧縮データを保持できません。 つまり、 FinalCompressedSizeCompressedBufferSize より大きくなります。

注釈

RtlCompressBuffer 関数は、圧縮されていないバッファーを入力として受け取り、圧縮されたデータが指定された宛先バッファー内に収まる場合は、圧縮された同等の値を生成します。

WorkSpace パラメーターの正しいバッファー サイズを確認するには、RtlGetCompressionWorkSpaceSize 関数を使用します。

圧縮バッファーを圧縮解除するには、 RtlDecompressBuffer 関数を 使用します。

圧縮バッファーから圧縮されていないフラグメントを抽出するには、 RtlDecompressFragment 関数を使用します。

要件

要件
サポートされている最小のクライアント Windows XP
対象プラットフォーム ユニバーサル
Header ntifs.h (Fltkernel.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize