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 UncomedBuffer 缓冲区是使用提供数据压缩和性能平衡的算法压缩的。 此值不能用于COMPRESSION_ENGINE_MAXIMUM。
COMPRESSION_ENGINE_MAXIMUM UncompressedBuffer 缓冲区使用提供最大数据压缩但性能相对较慢的算法进行压缩。 此值不能与COMPRESSION_ENGINE_STANDARD一起使用。
COMPRESSION_ENGINE_HIBER 此函数不支持。

[in] UncompressedBuffer

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

[in] UncompressedBufferSize

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

[out] CompressedBuffer

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

[in] CompressedBufferSize

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

[in] UncompressedChunkSize

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

[out] FinalCompressedSize

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

[in] WorkSpace

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

返回值

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

返回代码 描述
STATUS_SUCCESS 已成功压缩 UncomedBuffer 缓冲区。
STATUS_BUFFER_ALL_ZEROS 已成功压缩 UncomedBuffer 缓冲区,但此缓冲区仅包含零。
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)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize