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

Размер буфера CompressedBuffer (в байтах).

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

Комментарии

Относительно функции RtlDecompressBufferRtlDecompressFragment используется для распаковки части данных из сжатого буфера (в отличие от всего буфера).

Чтобы определить правильный размер буфера для параметра WorkSpace , используйте функцию RtlGetCompressionWorkSpaceSize (то есть значение, возвращаемое параметром RtlGetCompressionWorkSpaceSize ).

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

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

Требования

Требование Значение
Минимальная версия клиента Windows XP
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Fltkernel.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также раздел

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragmentEx