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

Размер в байтах буфера сжатойBuffer.

[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 (include Fltkernel.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragment