#ifndef _NTRTL_H
NTSYSAPI
NTSTATUS
NTAPI
RtlGetCompressionWorkSpaceSize(
_In_ USHORT CompressionFormatAndEngine,
_Out_ PULONG CompressBufferWorkSpaceSize,
_Out_ PULONG CompressFragmentWorkSpaceSize
);
View code on GitHub// ntifs.h
NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
[in] USHORT CompressionFormatAndEngine,
[out] PULONG CompressBufferWorkSpaceSize,
[out] PULONG CompressFragmentWorkSpaceSize
);
View the official Windows Driver Kit DDI referenceNo description available.
The RtlGetCompressionWorkSpaceSize function is used to determine the correct size of the WorkSpace buffer for the RtlCompressBuffer and RtlDecompressFragment functions.
CompressionFormatAndEngine [in]Bitmask specifying 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:
| Value | Meaning |
|---|---|
| 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. |
| COMPRESSION_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. |
CompressBufferWorkSpaceSize [out]A pointer to a caller-allocated buffer receiving the size, in bytes, required to compress a buffer. This value is used to determine the correct size of RtlCompressBuffer's WorkSpace buffer.
CompressFragmentWorkSpaceSize [out]A pointer to a caller-allocated buffer receiving the size, in bytes, required to decompress a compressed buffer to a fragment. This value is used to determine the correct size of RtlDecompressFragment's WorkSpace buffer. Note that the RtlCompressFragment function does not currently exist.
RtlGetCompressionWorkSpaceSizereturns an appropriate error status, such as one of the following:
| Return code | Description |
|---|---|
| STATUS_SUCCESS | The required buffer sizes, in bytes, were successfully returned. |
| STATUS_INVALID_PARAMETER | An invalid compression format was specified via the CompressionFormatAndEngine parameter. If CompressionFormatAndEngine is either COMPRESSION_FORMAT_NONE or COMPRESSION_FORMAT_DEFAULT (but not both), this value is returned. |
| STATUS_UNSUPPORTED_COMPRESSION | An invalid compression format was specified via the CompressionFormatAndEngine parameter. If CompressionFormatAndEngine is not one of the following, STATUS_UNSUPPORTED_COMPRESSION is returned: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUF |
| STATUS_NOT_SUPPORTED | An invalid compression engine was specified via the CompressionFormatAndEngine parameter. If CompressionFormatAndEngine is not COMPRESSION_ENGINE_STANDARD or COMPRESSION_ENGINE_MAXIMUM (but not both), this value is returned. |
The RtlCompressBuffer and RtlDecompressFragmentfunctions require an appropriately sized work space buffer to compress and decompress successfully. To determine the correct work space buffer size, in bytes, call the RtlGetCompressionWorkSpaceSize function.
As an example, the WorkSpace parameter of the RtlCompressBuffer function must point to an adequately sized work space buffer. The CompressBufferWorkSpaceSize parameter of the RtlGetCompressionWorkSpaceSize provides this size.
To compress an uncompressed buffer, use the RtlCompressBuffer function.
To decompress a compressed buffer, use the RtlDecompressBuffer function.
To decompress only a portion of a compressed buffer (that is, a "fragment" of the buffer), use the RtlDecompressFragment function.
This function is documented in Windows Driver Kit.
See RtlCompressBuffer for valid CompressionFormat flags.
You must allocate temporary compression buffer for system internal use in compression process.
Buffer must have pNeededBufferSize bytes length.
???, probably PageSize (0x4000).