RtlDecompressBufferEx2 函数 (ntifs.h)

RtlDecompressBufferEx2 函数尽可能使用多个处理器解压缩整个压缩缓冲区。 仅对内核模式调用方实现多个处理器支持。

语法

NT_RTL_COMPRESS_API NTSTATUS RtlDecompressBufferEx2(
  [in]           USHORT CompressionFormat,
  [out]          PUCHAR UncompressedBuffer,
  [in]           ULONG  UncompressedBufferSize,
  [in]           PUCHAR CompressedBuffer,
  [in]           ULONG  CompressedBufferSize,
  [in]           ULONG  UncompressedChunkSize,
  [out]          PULONG FinalUncompressedSize,
  [in, optional] PVOID  WorkSpace
);

参数

[in] CompressionFormat

指定压缩缓冲区的压缩格式的位掩码。 此参数必须设置为COMPRESSION_FORMAT_LZNT1。 此值和其他相关的压缩格式值的含义如下所示。

价值 意义
COMPRESSION_FORMAT_NONE 此函数不支持。
COMPRESSION_FORMAT_DEFAULT 此函数不支持。
COMPRESSION_FORMAT_LZNT1 该函数将执行 LZ 压缩。
COMPRESSION_FORMAT_XPRESS 该函数将执行 Xpress 压缩。
COMPRESSION_FORMAT_XPRESS_HUFF 该函数将执行 Xpress Huffman 解压缩。

[out] UncompressedBuffer

指向调用方分配的缓冲区(从分页池或非分页池分配)的指针,该缓冲区从 CompressedBuffer接收解压缩的数据。 此参数是必需的,不能为 NULL。

[in] UncompressedBufferSize

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

[in] CompressedBuffer

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

[in] CompressedBufferSize

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

[in] UncompressedChunkSize

压缩缓冲区中每个区块的大小(以字节为单位)。 有效值为 512、1024、2048 和 4096。

[out] FinalUncompressedSize

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

[in, optional] WorkSpace

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

返回值

RtlDecompressBufferEx2 返回适当的错误状态值,例如以下值之一。

返回代码 描述
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、COMPRESSION_FORMAT_XPRESS、COMPRESSION_FORMAT_XPRESS_HUFF、COMPRESSION_FORMAT_NONE、COMPRESSION_FORMAT_DEFAULT
STATUS_BAD_COMPRESSION_BUFFER UncompressedBuffer 不足以包含未压缩的数据。

言论

RtlDecompressBufferEx2 函数采用整个压缩缓冲区的输入并生成其解压缩等效项,前提是未压缩的数据适合指定的目标缓冲区。

若要仅解压缩压缩缓冲区的一部分(即缓冲区的“片段”),请使用 RtlDecompressFragment 函数。

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

要求

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

另请参阅

< FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressFragment

RtlDecompressFragmentEx