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


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

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

Синтаксис

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

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

[out] CompressFragmentWorkSpaceSize

Указатель на выделенный вызывающим буфером, получающий размер в байтах, необходимый для распаковки сжатого буфера в фрагмент. Это значение используется для определения правильного размера буфера RtlDecompressFragmentWorkSpace. Обратите внимание, что функция 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 должен указывать на достаточно размер буфера рабочего пространства. Параметр CompressBufferWorkSpaceSizeRtlGetCompressionWorkSpaceS ize предоставляет этот размер.

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
целевая платформа Всеобщий
заголовка ntifs.h (include Fltkernel.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

См. также

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment