RtlGetCompressionWorkSpaceSize 函数 (ntifs.h)

RtlGetCompressionWorkSpaceSize 函数用于确定 RtlCompressBufferRtlDecompressFragment 函数的 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 UncompressedBuffer 缓冲区使用在数据压缩和性能之间提供平衡的算法进行压缩。 此值不能与 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 (但不是同时) ,则返回此值。

注解

RtlCompressBufferRtlDecompressFragment函数需要适当大小的工作区缓冲区才能成功压缩和解压缩。 若要确定正确的工作区缓冲区大小(以字节为单位),请调用 RtlGetCompressionWorkSpaceSize 函数。

例如,RtlCompressBuffer 函数的 WorkSpace 参数必须指向适当大小的工作区缓冲区。 RtlGetCompressionWorkSpaceSizeCompressBufferWorkSpaceSize 参数提供此大小。

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

若要解压缩压缩的缓冲区,请使用 RtlDecompressBuffer 函数。

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

要求

要求
最低受支持的客户端 Windows XP
目标平台 通用
标头 ntifs.h (包括 Fltkernel.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment