rtlDecompressBuffer 函数 (ntifs.h)
RtlDecompressBuffer 函数解压缩整个压缩缓冲区。
语法
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressBuffer(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedBuffer,
[in] ULONG UncompressedBufferSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[out] PULONG FinalUncompressedSize
);
参数
[in] CompressionFormat
指定压缩缓冲区的压缩格式的位掩码。 此参数必须设置为 COMPRESSION_FORMAT_LZNT1。 此值和其他相关压缩格式值的含义如下所示。
值 | 含义 |
---|---|
COMPRESSION_FORMAT_NONE | 此函数不支持。 |
COMPRESSION_FORMAT_DEFAULT | 此函数不支持。 |
COMPRESSION_FORMAT_LZNT1 | 函数将执行 LZ 压缩。 |
COMPRESSION_FORMAT_XPRESS | 函数将执行 Xpress 压缩。 |
[out] UncompressedBuffer
指向调用方分配的缓冲区 (从从 CompressedBuffer 接收解压缩数据的分页池或非分页池) 分配的指针。 此参数是必需的,不能为 NULL。
[in] UncompressedBufferSize
UncompressedBuffer 缓冲区的大小(以字节为单位)。
[in] CompressedBuffer
指向包含要解压缩的数据的缓冲区的指针。 此参数是必需的,不能为 NULL。
[in] CompressedBufferSize
CompressedBuffer 缓冲区的大小(以字节为单位)。
[out] FinalUncompressedSize
指向调用方分配的变量的指针,该变量接收 UncompressedBuffer 中存储的解压缩数据的大小(以字节为单位)。 此参数是必需的,不能为 NULL。
返回值
RtlDecompressBuffer 返回适当的错误状态值,如以下值之一。
返回代码 | 说明 |
---|---|
STATUS_SUCCESS | CompressedBuffer 缓冲区已成功解压缩。 |
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 |
STATUS_BAD_COMPRESSION_BUFFER | UncompressedBuffer 不够大,无法包含未压缩的数据。 |
注解
RtlDecompressBuffer 函数将整个压缩缓冲区作为输入,并生成其解压缩的等效项,前提是未压缩的数据适合指定的目标缓冲区。
若要仅解压缩压缩缓冲区的一部分 (即缓冲区) 的“片段”,请使用 RtlDecompressFragment 函数。
若要压缩未压缩的缓冲区,请使用 RtlCompressBuffer 函数。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP |
目标平台 | 通用 |
标头 | ntifs.h (包括 Fltkernel.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |