Поделиться через


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

Размер в байтах буфера сжатойBuffer.

[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 недостаточно велик, чтобы содержать несжатые данные.

Замечания

Функция RtlDecompressBufferEx 2 принимает в качестве входных данных весь сжатый буфер и создает его декомпрессированный эквивалент, если несжатые данные помещаются в указанный буфер назначения.

Для распаковки только части сжатого буфера (то есть фрагмента буфера) используйте функцию RtlDecompressFragment.

Чтобы сжать несжатый буфер, используйте функцию RtlCompressBuffer.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10
целевая платформа Всеобщий
заголовка ntifs.h (include Fltkernel.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

< FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressFragment

RtlDecompressFragmentEx