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