Функция RtlDecompressFragmentEx (ntifs.h)

Функция RtlDecompressFragmentEx используется для распаковки части сжатого буфера (т. е. буфера "фрагмент"), используя по возможности несколько процессоров.

Синтаксис

NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragmentEx(
  [in]  USHORT CompressionFormat,
  [out] PUCHAR UncompressedFragment,
  [in]  ULONG  UncompressedFragmentSize,
  [in]  PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  FragmentOffset,
  [in]  ULONG  UncompressedChunkSize,
  [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

Отсчитываемое от нуля смещение в байтах, из которого извлекается несжатый фрагмент. Это значение смещения — это позиция в исходном несжатом буфере.

[in] UncompressedChunkSize

Размер (в байтах) каждого блока в буфере сжатия. Допустимые значения: 512, 1024, 2048 и 4096.

[out] FinalUncompressedSize

Указатель на переменную, выделенную вызывающим объектом, которая получает размер в байтах распакованных данных, хранящихся в UncompressedFragment. Этот параметр является обязательным и не может иметь значение NULL.

[in] WorkSpace

Указатель на буфер рабочего пространства, выделенный вызывающим объектом, используемый функцией RtlDecompressFragmentEx во время распаковки. Используйте функцию RtlGetCompressionWorkSpaceSize , чтобы определить правильный размер буфера рабочего пространства.

Возвращаемое значение

RtlDecompressFragmentEx возвращает соответствующий код 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 недостаточно велик, чтобы содержать несжатые данные.

Требования

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

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

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragment