Функция RtlDecompressBufferEx (ntifs.h)
Функция RtlDecompressBufferEx распаковывает весь сжатый буфер.
Синтаксис
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressBufferEx(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedBuffer,
[in] ULONG UncompressedBufferSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[out] PULONG FinalUncompressedSize,
[in] 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.
[out] FinalUncompressedSize
Указатель на выделенную вызывающим переменную, которая получает размер в байтах декомпрессированных данных, хранящихся в uncompressedBuffer. Этот параметр является обязательным и не может иметь значение NULL.
[in] WorkSpace
Указатель на выделенный вызывающим буфер рабочего пространства , используемый функцией RtlDecompressBufferEx во время распаковки. Используйте функцию RtlGetCompressionWorkSpaceSize, чтобы определить правильный размер буфера рабочего пространства.
Возвращаемое значение
RtlDecompressBufferEx возвращает соответствующее значение состояния ошибки, например одно из следующих.
Возвращаемый код | Описание |
---|---|
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 |
STATUS_BAD_COMPRESSION_BUFFER | uncompressedBuffer недостаточно велик, чтобы содержать несжатые данные. |
Замечания
Функция RtlDecompressBufferEx принимает в качестве входных данных весь сжатый буфер и создает его декомпрессированный эквивалент, если несжатые данные помещаются в указанный буфер назначения.
Для распаковки только части сжатого буфера (то есть фрагмента буфера) используйте функцию RtlDecompressFragment.
Чтобы сжать несжатый буфер, используйте функцию RtlCompressBuffer.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 8 |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Fltkernel.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |