RtlDecompressFragmentEx 函数 (ntifs.h)
RtlDecompressFragmentEx 函数用于尽可能使用多个处理器解压缩压缩缓冲区(即缓冲区“片段”)的一部分。
语法
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragmentEx(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedFragment,
[in] ULONG UncompressedFragmentSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG FragmentOffset,
[in] ULONG UncompressedChunkSize,
[out] PULONG FinalUncompressedSize,
[in] PVOID WorkSpace
);
参数
[in] CompressionFormat
指定压缩缓冲区的压缩格式的位掩码。 此参数必须设置为COMPRESSION_FORMAT_LZNT1。 此值和其他相关的压缩格式值的含义如下:
价值 | 意义 |
---|---|
COMPRESSION_FORMAT_NONE | 此函数不支持。 |
COMPRESSION_FORMAT_DEFAULT | 此函数不支持。 |
COMPRESSION_FORMAT_LZNT1 | 指定应执行压缩。 此值是必需的。 |
[out] UncompressedFragment
指向调用方分配的缓冲区(从分页池或非分页池分配)的指针,接收来自 CompressedBuffer的解压缩数据。 此参数是必需的,不能为 NULL。
[in] UncompressedFragmentSize
UncomedFragment 缓冲区的大小(以字节为单位)。
[in] CompressedBuffer
指向包含要解压缩的数据的缓冲区的指针。 此参数是必需的,不能为 NULL。
[in] CompressedBufferSize
CompressedBuffer 缓冲区的大小(以字节为单位)。
[in] FragmentOffset
从零开始的偏移量(以字节为单位),从中提取未压缩的片段。 此偏移值是原始未压缩缓冲区中的位置。
[in] UncompressedChunkSize
压缩缓冲区中每个区块的大小(以字节为单位)。 有效值为 512、1024、2048 和 4096。
[out] FinalUncompressedSize
指向调用方分配的变量的指针,该变量接收 UncompressedFragment中存储的解压缩数据的大小(以字节为单位)。 此参数是必需的,不能为 NULL。
[in] WorkSpace
指向解压缩期间由 RtlDecompressFragmentEx 函数使用的调用方分配的工作区缓冲区的指针。 使用 RtlGetCompressionWorkSpaceSize 函数来确定正确的工作区缓冲区大小。
返回值
RtlDecompressFragmentEx 返回适当的 NTSTATUS 代码,例如以下代码之一:
返回代码 | 描述 |
---|---|
STATUS_SUCCESS | CompressedBuffer 缓冲区已成功解压缩到 UncompressedFragment。 |
STATUS_INVALID_PARAMETER | 通过 CompressionFormat 参数指定了无效的压缩格式。 如果 CompressionFormat 为COMPRESSION_FORMAT_NONE或COMPRESSION_FORMAT_DEFAULT(但不是两者),则返回此值。 |
STATUS_UNSUPPORTED_COMPRESSION | 通过 CompressionFormat 参数指定了无效的压缩格式。 如果 CompressionFormat 不是下列项之一,则返回STATUS_UNSUPPORTED_COMPRESSION:COMPRESSION_FORMAT_LZNT1 |
STATUS_BAD_COMPRESSION_BUFFER | 未压缩的Fragment 不足以包含未压缩的数据。 |
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 |
目标平台 | 普遍 |
标头 | ntifs.h (包括 Fltkernel.h、 Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |