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