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

UncomedFragment 缓冲区的大小(以字节为单位)。

[in] CompressedBuffer

指向包含要解压缩的数据的缓冲区的指针。 此参数是必需的,不能为 NULL。

[in] CompressedBufferSize

CompressedBuffer 缓冲区的大小(以字节为单位)。

[in] FragmentOffset

从零开始的偏移量(以字节为单位),从中提取未压缩的片段。 此偏移值是原始未压缩缓冲区中的位置。

[out] FinalUncompressedSize

指向调用方分配的变量的指针,该变量接收 UncompressedFragment中存储的解压缩数据的大小(以字节为单位)。 此参数是必需的,不能为 NULL。

[in] WorkSpace

指向解压缩期间由 RtlDecompressFragment 函数使用的调用方分配的工作区缓冲区的指针。 使用 RtlGetCompressionWorkSpaceSize 函数来确定正确的工作区缓冲区大小。

返回值

RtlDecompressFragment返回适当的 NTSTATUS 代码,例如以下代码之一:

返回代码 描述
STATUS_SUCCESS CompressedBuffer 缓冲区已成功解压缩到 UncompressedFragment
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 未压缩的Fragment 不足以包含未压缩的数据。

言论

相对于 RtlDecompressBuffer 函数,RtlDecompressFragment 用于从压缩缓冲区(而不是整个缓冲区)解压缩部分数据。

若要确定 WorkSpace 参数的正确缓冲区大小,请使用 RtlGetCompressionWorkSpaceSize 函数(即 RtlGetCompressionWorkSpaceSize 参数返回的值)。

若要压缩未压缩的缓冲区,请使用 RtlCompressBuffer 函数。

若要解压缩整个压缩缓冲区,请使用 RtlDecompressBuffer 函数。

要求

要求 价值
最低支持的客户端 Windows XP
目标平台 普遍
标头 ntifs.h (包括 Fltkernel.h、 Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragmentEx