Функция RtlDecompressBufferEx2 (ntifs.h)
Функция RtlDecompressBufferEx2 распаковывает весь сжатый буфер, используя по возможности несколько процессоров. Поддержка нескольких процессоров реализована только для вызывающих элементов режима ядра.
Синтаксис
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressBufferEx2(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedBuffer,
[in] ULONG UncompressedBufferSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG UncompressedChunkSize,
[out] PULONG FinalUncompressedSize,
[in, optional] PVOID WorkSpace
);
Параметры
[in] CompressionFormat
Битовая маска, задающая формат сжатия сжатого буфера. Для этого параметра необходимо задать значение COMPRESSION_FORMAT_LZNT1. Значение этого и других связанных значений формата сжатия выглядит следующим образом.
Значение | Значение |
---|---|
COMPRESSION_FORMAT_NONE | Эта функция не поддерживается. |
COMPRESSION_FORMAT_DEFAULT | Эта функция не поддерживается. |
COMPRESSION_FORMAT_LZNT1 | Функция будет выполнять сжатие LZ. |
COMPRESSION_FORMAT_XPRESS | Функция будет выполнять сжатие Xpress. |
COMPRESSION_FORMAT_XPRESS_HUFF | Функция выполнит распаковку Xpress Huffman. |
[out] UncompressedBuffer
Указатель на буфер, выделенный вызывающим объектом (выделенный из страничного или нестраничного пула), который получает распакованные данные из CompressedBuffer. Этот параметр является обязательным и не может иметь значение NULL.
[in] UncompressedBufferSize
Размер буфера UncompressedBuffer (в байтах).
[in] CompressedBuffer
Указатель на буфер, содержащий данные для распаковки. Этот параметр является обязательным и не может иметь значение NULL.
[in] CompressedBufferSize
Размер буфера CompressedBuffer (в байтах).
[in] UncompressedChunkSize
Размер (в байтах) каждого блока в буфере сжатия. Допустимые значения: 512, 1024, 2048 и 4096.
[out] FinalUncompressedSize
Указатель на переменную, выделенную вызывающим объектом, которая получает размер в байтах распакованных данных, хранящихся в UncompressedBuffer. Этот параметр является обязательным и не может иметь значение NULL.
[in, optional] WorkSpace
Указатель на буфер рабочего пространства, выделенный вызывающим объектом, используемый функцией RtlDecompressBufferEx2 во время распаковки. Используйте функцию RtlGetCompressionWorkSpaceSize , чтобы определить правильный размер буфера рабочего пространства.
Возвращаемое значение
RtlDecompressBufferEx2 возвращает соответствующее значение состояния ошибки, например одно из следующих значений.
Код возврата | Описание |
---|---|
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, COMPRESSION_FORMAT_XPRESS_HUFF, COMPRESSION_FORMAT_NONE COMPRESSION_FORMAT_DEFAULT |
STATUS_BAD_COMPRESSION_BUFFER | UncompressedBuffer недостаточно велик, чтобы содержать несжатые данные. |
Комментарии
Функция RtlDecompressBufferEx2 принимает в качестве входных данных весь сжатый буфер и создает его распакованный эквивалент при условии, что несжатые данные помещаются в указанный буфер назначения.
Чтобы распаковать только часть сжатого буфера (то есть "фрагмент" буфера), используйте функцию RtlDecompressFragment .
Чтобы сжать несжатый буфер, используйте функцию RtlCompressBuffer .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10 |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Fltkernel.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |