Функция RtlDecompressFragment (ntifs.h)
Функция RtlDecompressFragment используется для распаковки части сжатого буфера (то есть буфера "фрагмент").
Синтаксис
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragment(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedFragment,
[in] ULONG UncompressedFragmentSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG FragmentOffset,
[out] PULONG FinalUncompressedSize,
[in] PVOID WorkSpace
);
Параметры
[in] CompressionFormat
Битовая маска, указывающая формат сжатия сжатого буфера. Этот параметр должен иметь значение COMPRESSION_FORMAT_LZNT1. Значение этого и других связанных значений формата сжатия выглядит следующим образом:
Ценность | Значение |
---|---|
COMPRESSION_FORMAT_NONE | Эта функция не поддерживается. |
COMPRESSION_FORMAT_DEFAULT | Эта функция не поддерживается. |
COMPRESSION_FORMAT_LZNT1 | Указывает, что необходимо выполнить сжатие. Это значение является обязательным. |
[out] UncompressedFragment
Указатель на выделенный вызывающим буфер (выделенный из страничного или нестраничного пула), получающий распакованные данные из CompressedBuffer. Этот параметр является обязательным и не может иметь значение NULL.
[in] UncompressedFragmentSize
Размер буфера uncompressedFragment в байтах.
[in] CompressedBuffer
Указатель на буфер, содержащий данные для распаковки. Этот параметр является обязательным и не может иметь значение NULL.
[in] CompressedBufferSize
Размер в байтах буфера сжатойBuffer.
[in] FragmentOffset
Отсчитываемое от нуля смещение в байтах, из которого извлекается несжатый фрагмент. Это значение смещения — это позиция в исходном несжатом буфере.
[out] FinalUncompressedSize
Указатель на выделенную вызывающим переменную, которая получает размер в байтах распакованных данных, хранящихся в uncompressedFragment. Этот параметр является обязательным и не может иметь значение NULL.
[in] WorkSpace
Указатель на буфер рабочего пространства, выделенный вызывающим объектом, используемый функцией RtlDecompressFragment во время распаковки. Используйте функцию RtlGetCompressionWorkSpaceSize, чтобы определить правильный размер буфера рабочего пространства.
Возвращаемое значение
RtlDecompressFragmentвозвращает соответствующий код NTSTATUS, например один из следующих:
Возвращаемый код | Описание |
---|---|
STATUS_SUCCESS | Буфер CompressedBuffer успешно распаковывался в uncompressedFragment. |
STATUS_INVALID_PARAMETER | Недопустимый формат сжатия был указан с помощью параметра CompressionFormat. Если CompressionFormat COMPRESSION_FORMAT_NONE или COMPRESSION_FORMAT_DEFAULT (но не оба), возвращается это значение. |
STATUS_UNSUPPORTED_COMPRESSION | Недопустимый формат сжатия был указан с помощью параметра CompressionFormat. Если CompressionFormat не является одной из следующих, возвращается STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1 |
STATUS_BAD_COMPRESSION_BUFFER | uncompressedFragment недостаточно велик, чтобы содержать несжатые данные. |
Замечания
Относительно функции RtlDecompressBuffer, RtlDecompressFragment используется для распаковки части данных из сжатого буфера (в отличие от всего буфера).
Чтобы определить правильный размер буфера для параметра WorkSpace, используйте функцию RtlGetCompressionWorkSpaceSize (то есть значение, возвращаемое параметром RtlGetCompressionWorkSpaceSize).
Чтобы сжать несжатый буфер, используйте функцию RtlCompressBuffer.
Чтобы распаковать весь сжатый буфер, используйте функцию RtlDecompressBuffer.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP |
целевая платформа | Всеобщий |
заголовка | ntifs.h (include Fltkernel.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |