Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция RtlCompressBuffer сжимает буфер и может использоваться драйвером файловой системы для упрощения реализации сжатия файлов.
Синтаксис
NT_RTL_COMPRESS_API NTSTATUS RtlCompressBuffer(
[in] USHORT CompressionFormatAndEngine,
[in] PUCHAR UncompressedBuffer,
[in] ULONG UncompressedBufferSize,
[out] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG UncompressedChunkSize,
[out] PULONG FinalCompressedSize,
[in] PVOID WorkSpace
);
Параметры
[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 | Эта функция не поддерживается. |
[in] UncompressedBuffer
Указатель на выделенный вызывающим буфер (выделенный из страничного или нестраничного пула), содержащий сжатые данные. Этот параметр является обязательным и не может иметь значение NULL.
[in] UncompressedBufferSize
Размер буфера UncompressedBuffer в байтах.
[out] CompressedBuffer
Указатель на выделенный вызывающим буфер (выделенный из страничного или нестраничного пула), который получает сжатые данные. Этот параметр является обязательным и не может иметь значение NULL.
[in] CompressedBufferSize
Размер в байтах буфера сжатойBuffer.
[in] UncompressedChunkSize
Размер блока, используемый при сжатие буфера UncompressedBuffer. Этот параметр должен быть одним из следующих значений: 512, 1024, 2048 или 4096. Операционная система использует 4096, а рекомендуемое значение для этого параметра также равно 4096.
[out] FinalCompressedSize
Указатель на выделенную вызывающим переменную, которая получает размер в байтах сжатых данных, хранящихся в CompressedBuffer. Этот параметр является обязательным и не может иметь значение NULL.
[in] WorkSpace
Указатель на буфер рабочего пространства, выделенный вызывающим объектом, используемый функцией RtlCompressBuffer во время сжатия. Используйте функцию RtlGetCompressionWorkSpaceSize, чтобы определить правильный размер буфера рабочего пространства.
Возвращаемое значение
RtlCompressBuffer возвращает соответствующее значение состояния ошибки, например одно из следующих.
| Возвращаемый код | Описание |
|---|---|
| STATUS_SUCCESS | Буфер uncompressedBuffer был успешно сжатым. |
| STATUS_BUFFER_ALL_ZEROS | Буфер uncompressedBuffer был успешно сжатым, но этот буфер содержит только нули. |
| STATUS_INVALID_PARAMETER | Недопустимый формат сжатия был указан с помощью параметра CompressionFormat. Если CompressionFormat COMPRESSION_FORMAT_NONE или COMPRESSION_FORMAT_DEFAULT (но не оба), возвращается это значение. |
| STATUS_UNSUPPORTED_COMPRESSION | Недопустимый формат сжатия был указан с помощью параметра CompressionFormat. Если CompressionFormat не является одной из следующих, возвращается STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF |
| STATUS_NOT_SUPPORTED | Недопустимый механизм сжатия был указан с помощью параметра CompressionFormatAndEngine. Если CompressionFormatAndEngine не COMPRESSION_ENGINE_STANDARD или COMPRESSION_ENGINE_MAXIMUM (но не оба), возвращается это значение. |
| STATUS_BUFFER_TOO_SMALL | Сжатый буфер слишком мал для хранения сжатых данных. То есть FinalCompressedSize больше CompressedBufferSize. |
Замечания
Функция RtlCompressBuffer принимает в качестве входных данных несжатый буфер и создает его сжатый эквивалент, если сжатые данные помещаются в указанный целевой буфер.
Чтобы определить правильный размер буфера для параметра WorkSpace, используйте функцию RtlGetCompressionWorkSpaceSize.
Чтобы распаковывать сжатый буфер, используйте функцию RtlDecompressBuffer.
Чтобы извлечь несжатый фрагмент из сжатого буфера, используйте функцию RtlDecompressFragment.
Требования
| Требование | Ценность |
|---|---|
| минимальные поддерживаемые клиентские | Windows XP |
| целевая платформа | Всеобщий |
| заголовка | ntifs.h (include Fltkernel.h, Ntifs.h) |
| библиотеки | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | <= APC_LEVEL |