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 |