RtlCompressBuffer 函式 (ntifs.h)

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

指定壓縮格式和引擎類型的位掩碼。 這個參數必須設定為一個格式類型和一個引擎類型的有效位 OR 組合。 例如,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

CompressedBuffer 緩衝區的大小,以位元組為單位。

[in] UncompressedChunkSize

壓縮 UncompressedBuffer 緩衝區時要使用的區塊大小。 此參數必須是下列其中一個值:512、1024、2048 或 4096。 操作系統會使用 4096,而此參數的建議值也是 4096。

[out] FinalCompressedSize

呼叫端配置的變數指標,可接收儲存在 CompressedBuffer 中之壓縮數據的大小,以位元組為單位。 這個參數是必要的,而且不能是 NULL。

[in] WorkSpace

壓縮期間 RtlCompressBuffer 函式所使用的呼叫端配置工作區緩衝區指標。 使用 RtlGetCompressionWorkSpaceSize 函式來判斷正確的工作區緩衝區大小。

傳回值

RtlCompressBuffer 會傳回適當的錯誤狀態值,例如下列其中一個。

傳回碼 Description
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
目標平台 Universal
標頭 ntifs.h (包括 Fltkernel.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= APC_LEVEL

另請參閱

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize