解壓縮函式 (compressapi.h)
接受壓縮資訊的區塊並解壓縮。
語法
BOOL Decompress(
[in] DECOMPRESSOR_HANDLE DecompressorHandle,
[in] LPCVOID CompressedData,
[in] SIZE_T CompressedDataSize,
[out] PVOID UncompressedBuffer,
[in] SIZE_T UncompressedBufferSize,
[out] PSIZE_T UncompressedDataSize
);
參數
[in] DecompressorHandle
CreateDecompressor所傳回之解壓縮程式的控制碼。
[in] CompressedData
包含要解壓縮的資訊區塊。 CompressedDataSize會提供壓縮區塊的位元組大小。
[in] CompressedDataSize
壓縮資訊的大小,以位元組為單位。
[out] UncompressedBuffer
接收未壓縮資訊的緩衝區。 緩衝區的大小以位元組為單位,由 UncompressedBufferSize指定。
[in] UncompressedBufferSize
緩衝區的大小,以位元組為單位,接收未壓縮的資訊。
[out] UncompressedDataSize
所接收未壓縮資訊的實際大小,以位元組為單位。
傳回值
如果函式成功,則傳回非零的值。 如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
如果 CompressedData 所指向的壓縮資料區塊已損毀,函式可能會失敗,而且 GetLastError 的錯誤可以 ERROR_BAD_COMPRESSION_BUFFER。 此函式也可能會產生不符合原始資料的未壓縮資料區塊。
建議不要使用 COMPRESS_RAW 旗標的壓縮器和解壓縮器。 如果使用 COMPRESS_RAW 旗標建立壓縮器,也必須使用 COMPRESS_RAW 旗標來建立解壓縮器。
如果使用 COMPRESS_RAW 旗標建立壓縮器和解壓縮器, UncompressedBufferSize 的值必須完全符合未壓縮資料的原始大小,而不只是輸出緩衝區的大小。 這表示使用 COMPRESS_RAW 旗標時,您應該儲存未壓縮資料的確切原始大小,以及壓縮的資料和壓縮的大小。 如果 UncompressedBufferSize 不等於未壓縮資料的原始大小,則未壓縮的資料將不會與原始資料相符。 在此情況下,函式可以傳回成功,也可以傳回 ERROR_BAD_COMPRESSION_BUFFER。
如果未使用 COMPRESS_RAW 旗標, 則 UncompressedBufferSize 不需要完全符合未壓縮資料的原始大小。 在此情況下, UncompressedDataSize 會傳回未壓縮資料的原始大小。 如果 UncompressedBufferSize 小於原始資料大小,函式將會失敗,並將 UncompressedDataSize 設定為原始資料的大小,而且 GetLastError 的錯誤 ERROR_INSUFFICIENT_BUFFER。
若要判斷 UncompressedBuffer 需要的大小,請呼叫 將 UncompressedBufferSize 設為零的函式。 在此情況下,函式將會失敗,並將 UncompressedDataSize 設定為原始資料的大小,且 來自 GetLastError 的錯誤 ERROR_INSUFFICIENT_BUFFER。 請注意,函式所傳回的原始大小會從緩衝區本身擷取,而且應該視為不受信任,並針對合理的限制進行測試。
如果使用 CompressedDataSize 參數設定為零呼叫函式,則函式會失敗,而且 GetLastError 的錯誤 ERROR_INSUFFICIENT_BUFFER。 當函式失敗時,函式會傳回 UncompressedDataSize 設定為值,讓您可用來避免為壓縮資料配置太大的緩衝區。 您必須知道原始資料的最大可能大小,才能使用此方法。
如果您將 CompressedDataSize 設定為零,並將 UncompressedBufferSize 設定為原始未壓縮資料的最大可能大小, Decompress 函式將會失敗,並將 UncompressedDataSize 的值設定為壓縮資料緩衝區的大小上限。
如果壓縮演算法因為某些內部原因而失敗, 則 GetLastError 的錯誤可能會 ERROR_FUNCTION_FAILED。 如果系統找不到壓縮演算法控制碼,則可以 ERROR_INVALID_HANDLE錯誤。 如果輸出緩衝區太小而無法保存未壓縮的資料,則可以 ERROR_INSUFFICIENT_BUFFER錯誤。
規格需求
最低支援的用戶端 | Windows 8 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2012 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | compressapi.h |
程式庫 | Cabinet.lib |
Dll | Cabinet.dll |