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

Функция RtlGetCompressionWorkSpaceSize используется для определения правильного размера буфера WorkSpace для функций RtlCompressBuffer и RtlDecompressFragment .

Синтаксис

NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
  [in]  USHORT CompressionFormatAndEngine,
  [out] PULONG CompressBufferWorkSpaceSize,
  [out] PULONG CompressFragmentWorkSpaceSize
);

Параметры

[in] CompressionFormatAndEngine

Битовая маска, указывающая формат сжатия и тип обработчика. Для этого параметра необходимо задать допустимое побитовое или сочетание одного типа формата и одного типа подсистемы. Например, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

Значения этих и других связанных значений:

Значение Значение
COMPRESSION_FORMAT_NONE Эта функция не поддерживается.
COMPRESSION_FORMAT_DEFAULT Эта функция не поддерживается.
COMPRESSION_FORMAT_LZNT1 Функция будет выполнять сжатие LZ.
COMPRESSION_FORMAT_XPRESS Функция будет выполнять сжатие Xpress.
COMPRESSION_FORMAT_XPRESS_HUFF Функция будет выполнять сжатие Xpress Huffman.
COMPRESSION_ENGINE_STANDARD Буфер UncompressedBuffer сжимается с помощью алгоритма, который обеспечивает баланс между сжатием данных и производительностью. Это значение нельзя использовать с COMPRESSION_ENGINE_MAXIMUM.
COMPRESSION_ENGINE_MAXIMUM Буфер UncompressedBuffer сжимается с помощью алгоритма, который обеспечивает максимальное сжатие данных, но с относительно низкой производительностью. Это значение нельзя использовать с COMPRESSION_ENGINE_STANDARD.
COMPRESSION_ENGINE_HIBER Эта функция не поддерживается.

[out] CompressBufferWorkSpaceSize

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

[out] CompressFragmentWorkSpaceSize

Указатель на буфер, выделенный вызывающим объектом, получающий размер в байтах, необходимый для распаковки сжатого буфера во фрагмент. Это значение используется для определения правильного размера буфера WorkSpace RtlDecompressFragment. Обратите внимание, что функция RtlCompressFragment в настоящее время не существует.

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

RtlGetCompressionWorkSpaceSizeвозвращает соответствующее состояние ошибки, например одно из следующих значений:

Код возврата Описание
STATUS_SUCCESS Необходимые размеры буфера в байтах были успешно возвращены.
STATUS_INVALID_PARAMETER Недопустимый формат сжатия был указан с помощью параметра CompressionFormatAndEngine . Если compressionFormatAndEngine имеет значение COMPRESSION_FORMAT_NONE или COMPRESSION_FORMAT_DEFAULT (но не оба), это значение возвращается.
STATUS_UNSUPPORTED_COMPRESSION Недопустимый формат сжатия был указан с помощью параметра CompressionFormatAndEngine . Если compressionFormatAndEngine не является одним из следующих значений, возвращается STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS COMPRESSION_FORMAT_XPRESS_HUF
STATUS_NOT_SUPPORTED Недопустимый механизм сжатия был указан с помощью параметра CompressionFormatAndEngine . Если compressionFormatAndEngine не COMPRESSION_ENGINE_STANDARD или COMPRESSION_ENGINE_MAXIMUM (но не оба), возвращается это значение.

Комментарии

Для успешного сжатия и распаковки функций RtlCompressBuffer и RtlDecompressFragmentтребуется буфер рабочего пространства соответствующего размера. Чтобы определить правильный размер буфера рабочего пространства в байтах, вызовите функцию RtlGetCompressionWorkSpaceSize .

Например, параметр WorkSpace функции RtlCompressBuffer должен указывать на буфер рабочего пространства соответствующего размера. Параметр CompressBufferWorkSpaceSizeобъекта RtlGetCompressionWorkSpaceSize предоставляет этот размер.

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

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

Чтобы распаковка только части сжатого буфера (то есть "фрагмента" буфера), используйте функцию RtlDecompressFragment .

Требования

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

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

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment