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

指定压缩格式和引擎类型的位掩码。 此参数必须设置为一种格式类型和一种引擎类型的有效按位 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 UncompressedBuffer 缓冲区使用在数据压缩和性能之间提供平衡的算法进行压缩。 此值不能与 COMPRESSION_ENGINE_MAXIMUM 一起使用。
COMPRESSION_ENGINE_MAXIMUM UncompressedBuffer 缓冲区使用提供最大数据压缩但性能相对较慢的算法进行压缩。 此值不能与 COMPRESSION_ENGINE_STANDARD 一起使用。
COMPRESSION_ENGINE_HIBER 此函数不支持。

[in] UncompressedBuffer

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

[in] UncompressedBufferSize

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

[out] CompressedBuffer

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

[in] CompressedBufferSize

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

[in] UncompressedChunkSize

压缩 UncompressedBuffer 缓冲区时要使用的区块大小。 此参数必须是以下值之一:512、1024、2048 或 4096。 操作系统使用 4096,此参数的建议值也为 4096。

[out] FinalCompressedSize

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

[in] WorkSpace

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

返回值

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

返回代码 说明
STATUS_SUCCESS UncompressedBuffer 缓冲区已成功压缩。
STATUS_BUFFER_ALL_ZEROS UncompressedBuffer 缓冲区已成功压缩,但此缓冲区仅包含零。
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
目标平台 通用
标头 ntifs.h (包括 Fltkernel.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize