RtlDecompressFragment 関数 (ntifs.h)

RtlDecompressFragment 関数は、圧縮バッファーの一部 (つまりバッファー "フラグメント") を圧縮解除するために使用されます。

構文

NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragment(
  [in]  USHORT CompressionFormat,
  [out] PUCHAR UncompressedFragment,
  [in]  ULONG  UncompressedFragmentSize,
  [in]  PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  FragmentOffset,
  [out] PULONG FinalUncompressedSize,
  [in]  PVOID  WorkSpace
);

パラメーター

[in] CompressionFormat

圧縮バッファーの圧縮形式を指定するビットマスク。 このパラメーターは、COMPRESSION_FORMAT_LZNT1に設定する必要があります。 このおよび他の関連する圧縮形式の値の意味は次のとおりです。

意味
COMPRESSION_FORMAT_NONE この関数ではサポートされていません。
COMPRESSION_FORMAT_DEFAULT この関数ではサポートされていません。
COMPRESSION_FORMAT_LZNT1 圧縮を実行することを指定します。 この値は必須です。

[out] UncompressedFragment

CompressedBuffer から圧縮解除されたデータを受信する呼び出し元によって割り当てられたバッファー (ページプールまたは非ページ プールから割り当てられる) へのポインター。 このパラメーターは必須であり、NULL にすることはできません。

[in] UncompressedFragmentSize

非圧縮Fragment バッファーのサイズ (バイト単位)。

[in] CompressedBuffer

圧縮解除するデータを含むバッファーへのポインター。 このパラメーターは必須であり、NULL にすることはできません。

[in] CompressedBufferSize

CompressedBuffer バッファーのサイズ (バイト単位)。

[in] FragmentOffset

非圧縮フラグメントの抽出元の 0 から始まるオフセット (バイト単位)。 このオフセット値は、元の非圧縮バッファー内の位置です。

[out] FinalUncompressedSize

CompressedFragment に格納されている圧縮解除されたデータのサイズ (バイト単位) を受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは必須であり、NULL にすることはできません。

[in] WorkSpace

展開中に RtlDecompressFragment 関数によって使用される呼び出し元によって割り当てられた作業空間バッファーへのポインター。 RtlGetCompressionWorkSpaceSize 関数を使用して、正しい作業スペース バッファー サイズを決定します。

戻り値

RtlDecompressFragmentは、次のいずれかの適切な NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS CompressedBuffer バッファーが正常に圧縮解除され、圧縮解除されました
STATUS_INVALID_PARAMETER CompressionFormat パラメーターを使用して無効な圧縮形式が指定されました。 CompressionFormat がCOMPRESSION_FORMAT_NONEまたはCOMPRESSION_FORMAT_DEFAULT (両方ではない) の場合は、この値が返されます。
STATUS_UNSUPPORTED_COMPRESSION CompressionFormat パラメーターを使用して無効な圧縮形式が指定されました。 CompressionFormat が次のいずれかでない場合は、STATUS_UNSUPPORTED_COMPRESSIONが返されます: COMPRESSION_FORMAT_LZNT1
STATUS_BAD_COMPRESSION_BUFFER 圧縮されていない データを格納するのに十分な大きさではありません。

注釈

RtlDecompressBuffer 関数に対して、RtlDecompressFragment は、(バッファー全体ではなく) 圧縮バッファーからデータの一部を圧縮解除するために使用されます。

WorkSpace パラメーターの正しいバッファー サイズを確認するには、RtlGetCompressionWorkSpaceSize 関数 (つまり、RtlGetCompressionWorkSpaceSize パラメーターによって返される値) を使用します。

圧縮されていないバッファーを圧縮するには、 RtlCompressBuffer 関数を 使用します。

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

要件

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

こちらもご覧ください

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragmentEx