(ntifs.h) RtlGetCompressionWorkSpaceSize 函式
RtlGetCompressionWorkSpaceSize 函式可用來判斷 RtlCompressBuffer 和 RtlDecompressFragment 函式之 WorkSpace 緩衝區的正確大小。
語法
NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
[in] USHORT CompressionFormatAndEngine,
[out] PULONG CompressBufferWorkSpaceSize,
[out] PULONG CompressFragmentWorkSpaceSize
);
參數
[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 | 此函式不支援。 |
[out] CompressBufferWorkSpaceSize
呼叫端配置的緩衝區指標,接收壓縮緩衝區所需的大小,以位元組為單位。 這個值是用來判斷 RtlCompressBuffer的 WorkSpace 緩衝區的正確大小。
[out] CompressFragmentWorkSpaceSize
呼叫端配置的緩衝區指標,接收將壓縮緩衝區解壓縮至片段所需的大小,以位元組為單位。 這個值是用來判斷 RtlDecompressFragment的 WorkSpace 緩衝區的正確大小。 請注意, RtlCompressFragment 函式目前不存在。
傳回值
RtlGetCompressionWorkSpaceSize會傳回適當的錯誤狀態,例如下列其中一項:
傳回碼 | Description |
---|---|
STATUS_SUCCESS | 已成功傳回所需的緩衝區大小,以位元組為單位。 |
STATUS_INVALID_PARAMETER | 透過 CompressionFormatAndEngine 參數指定了無效的壓縮格式。 如果 CompressionFormatAndEngine 為 COMPRESSION_FORMAT_NONE 或 COMPRESSION_FORMAT_DEFAULT (,但不會同時傳回這兩個) ,則會傳回此值。 |
STATUS_UNSUPPORTED_COMPRESSION | 透過 CompressionFormatAndEngine 參數指定了無效的壓縮格式。 如果 CompressionFormatAndEngine 不是下列其中一項,則會傳回STATUS_UNSUPPORTED_COMPRESSION:COMPRESSION_FORMAT_LZNT1、COMPRESSION_FORMAT_XPRESS COMPRESSION_FORMAT_XPRESS_HUF |
STATUS_NOT_SUPPORTED | 透過 CompressionFormatAndEngine 參數指定了無效的壓縮引擎。 如果 CompressionFormatAndEngine 未COMPRESSION_ENGINE_STANDARD或COMPRESSION_ENGINE_MAXIMUM (,但不會同時傳回這兩個) ,則會傳回此值。 |
備註
RtlCompressBuffer 和 RtlDecompressFragment函式需要適當大小的工作區緩衝區,才能成功壓縮和解壓縮。 若要判斷正確的工作區緩衝區大小,以位元組為單位,請呼叫 RtlGetCompressionWorkSpaceSize 函式。
例如,RtlCompressBuffer 函式的 WorkSpace 參數必須指向適當大小的工作區緩衝區。 RtlGetCompressionWorkSpaceSize 的 CompressBufferWorkSpaceSize 参數會提供此大小。
若要壓縮未壓縮的緩衝區,請使用 RtlCompressBuffer 函 式。
若要解壓縮壓縮的緩衝區,請使用 RtlDecompressBuffer 函 式。
若要只解壓縮壓縮緩衝區 (的部分,也就是緩衝區) 的「片段」,請使用 RtlDecompressFragment 函式 。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP |
目標平台 | Universal |
標頭 | ntifs.h (包含 Fltkernel.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |