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 |