Функция 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

См. также раздел

<FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressFragment

RtlDecompressFragmentEx