RtlCompressBuffer function

Expand
1 out of 1 rated this helpful Rate this topic

RtlCompressBuffer function

The RtlCompressBuffer function compresses a buffer and can be used by a file system driver to facilitate the implementation of file compression.

Syntax

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
);

Parameters

CompressionFormatAndEngine [in]

A bitmask that specifies the compression format and engine type. This parameter must be set to a valid bitwise OR combination of one format type and one engine type. For example, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

The meanings of these, and other related values, are as follows.

ValueMeaning
COMPRESSION_FORMAT_NONE

Not supported by this function.

COMPRESSION_FORMAT_DEFAULT

Not supported by this function.

COMPRESSION_FORMAT_LZNT1

The function will perform LZ compression.

COMPRESSION_FORMAT_XPRESS

The function will perform Xpress compression.

COMPRESSION_FORMAT_XPRESS_HUFF

The function will perform Xpress Huffman compression.

COMPRESSION_ENGINE_STANDARD

The UncompressedBuffer buffer is compressed using an algorithm that provides a balance between data compression and performance. This value cannot be used with COMPRESSION_ENGINE_MAXIMUM.

CCOMPRESSION_ENGINE_MAXIMUM

The UncompressedBuffer buffer is compressed using an algorithm that provides maximum data compression but with relatively slower performance. This value cannot be used with COMPRESSION_ENGINE_STANDARD.

COMPRESSION_ENGINE_HIBER

Not supported by this function.

 

UncompressedBuffer [in]

A pointer to a caller-allocated buffer (allocated from paged or non-paged pool) that contains the data to be compressed. This parameter is required and cannot be NULL.

UncompressedBufferSize [in]

The size, in bytes, of the UncompressedBuffer buffer.

CompressedBuffer [out]

A pointer to a caller-allocated buffer (allocated from paged or non-paged pool) that receives the compressed data. This parameter is required and cannot be NULL.

CompressedBufferSize [in]

The size, in bytes, of the CompressedBuffer buffer.

UncompressedChunkSize [in]

The chunk size to use when compressing the UncompressedBuffer buffer. This parameter must be one of the following values: 512, 1024, 2048, or 4096. The operating system uses 4096, and the recommended value for this parameter is also 4096.

FinalCompressedSize [out]

A pointer to a caller-allocated variable that receives the size, in bytes, of the compressed data stored in CompressedBuffer. This parameter is required and cannot be NULL.

WorkSpace [in]

A pointer to a caller-allocated work space buffer used by the RtlCompressBuffer function during compression. Use the RtlGetCompressionWorkSpaceSize function to determine the correct work space buffer size.

Return value

RtlCompressBuffer returns an appropriate error status value, such as one of the following.

Return codeDescription
STATUS_SUCCESS

The UncompressedBuffer buffer was successfully compressed.

STATUS_BUFFER_ALL_ZEROS

The UncompressedBuffer buffer was successfully compressed, but this buffer contains only zeros.

STATUS_INVALID_PARAMETER
STATUS_UNSUPPORTED_COMPRESSION
  • COMPRESSION_FORMAT_LZNT1

  • COMPRESSION_FORMAT_XPRESS

  • COMPRESSION_FORMAT_XPRESS_HUFF

  • COMPRESSION_FORMAT_NONE (in this case, STATUS_INVALID_PARAMETER is returned)

  • COMPRESSION_FORMAT_DEFAULT (in this case, STATUS_INVALID_PARAMETER is returned)

STATUS_NOT_SUPPORTED

An invalid compression engine was specified through the CompressionFormatAndEngine parameter. If CompressionFormatAndEngine is not COMPRESSION_ENGINE_STANDARD or COMPRESSION_ENGINE_MAXIMUM (but not both), this value is returned.

STATUS_BUFFER_TOO_SMALL

The compressed buffer is too small to hold the compressed data. That is, FinalCompressedSize is greater than CompressedBufferSize.

 

Remarks

The RtlDecompressBuffer function takes as input an uncompressed buffer and produces its compressed equivalent provided that the compressed data fits within the specified destination buffer.

To determine the correct buffer size for the WorkSpace parameter, use the RtlGetCompressionWorkSpaceSize function.

To decompress a compressed buffer, use the RtlDecompressBuffer function.

To extract an uncompressed fragment from a compressed buffer, use the RtlDecompressFragment function.

Requirements

Version

Available starting in Windows XP.

Header

Ntifs.h (include Fltkernel.h or Ntifs.h)

Library

Ntoskrnl.lib

IRQL

<= APC_LEVEL

See also

FILE_COMPRESSION_INFORMATION
RtlDecompressBuffer
RtlDecompressFragment
RtlGetCompressionWorkSpaceSize

 

 

Send comments about this topic to Microsoft

Build date: 9/7/2011

Did you find this helpful?
(1500 characters remaining)