RtlGetCompressionWorkSpaceSize 函数 (ntifs.h)
RtlGetCompressionWorkSpaceSize 函数用于确定 RtlCompressBuffer 和 RtlDecompressFragment 函数 WorkSpace 缓冲区的正确大小。
语法
NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
[in] USHORT CompressionFormatAndEngine,
[out] PULONG CompressBufferWorkSpaceSize,
[out] PULONG CompressFragmentWorkSpaceSize
);
参数
[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 | 此函数不支持。 |
[out] CompressBufferWorkSpaceSize
指向调用方分配的缓冲区的指针,接收压缩缓冲区所需的大小(以字节为单位)。 此值用于确定 RtlCompressBufferWorkSpace 缓冲区的正确大小。
[out] CompressFragmentWorkSpaceSize
指向调用方分配的缓冲区的指针,接收将压缩缓冲区解压缩到片段所需的大小(以字节为单位)。 此值用于确定 RtlDecompressFragmentWorkSpace 缓冲区的正确大小。 请注意,RtlCompressFragment 函数当前不存在。
返回值
RtlGetCompressionWorkSpaceSize返回适当的错误状态,例如以下错误状态之一:
返回代码 | 描述 |
---|---|
STATUS_SUCCESS | 已成功返回所需的缓冲区大小(以字节为单位)。 |
STATUS_INVALID_PARAMETER | 通过 CompressionFormatAndEngine 参数指定了无效的压缩格式。 如果 CompressionFormatAndEngine 为COMPRESSION_FORMAT_NONE或COMPRESSION_FORMAT_DEFAULT(但不是两者),则返回此值。 |
STATUS_UNSUPPORTED_COMPRESSION | 通过 CompressionFormatAndEngine 参数指定了无效的压缩格式。 如果 CompressionFormatAndEngine 不是下列项之一,则返回STATUS_UNSUPPORTED_COMPRESSION:COMPRESSION_FORMAT_LZNT1、COMPRESSION_FORMAT_XPRESS、COMPRESSION_FORMAT_XPRESS_HUF |
STATUS_NOT_SUPPORTED | 通过 CompressionFormatAndEngine 参数指定了无效的压缩引擎。 如果 CompressionFormatAndEngine 不是COMPRESSION_ENGINE_STANDARD或COMPRESSION_ENGINE_MAXIMUM(但不是两者),则返回此值。 |
言论
RtlCompressBuffer 和 RtlDecompressFragment函数需要适当大小的工作区缓冲区才能成功压缩和解压缩。 若要确定正确的工作区缓冲区大小(以字节为单位)调用 RtlGetCompressionWorkSpaceSize 函数。
例如,RtlCompressBuffer 函数的 WorkSpace 参数必须指向足够大小的工作区缓冲区。 RtlGetCompressionWorkSpaceSize 的 CompressBufferWorkSpaceSize 参数提供此大小。
若要压缩未压缩的缓冲区,请使用 RtlCompressBuffer 函数。
若要解压缩压缩缓冲区,请使用 RtlDecompressBuffer 函数。
若要仅解压缩压缩缓冲区的一部分(即缓冲区的“片段”),请使用 RtlDecompressFragment 函数。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP |
目标平台 | 普遍 |
标头 | ntifs.h (包括 Fltkernel.h、 Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |