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


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

См. также

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragmentEx