我想在用戶模式下使用WINAPI RtlDecompressBuffer來解壓縮先前使用RtlCompressBuffer壓縮的緩衝區。我有壓縮代碼,但似乎爲了解壓縮,我需要知道未壓縮數據的大小,因爲函數需要它作爲參數。如何在不知道未壓縮數據大小的情況下使用RtlDecompressBuffer?
如何在不知道未壓縮數據大小的情況下做到這一點? 也許我應該使用RtlDecompressFragment。
代碼示例會很棒!
在此先感謝。
我想在用戶模式下使用WINAPI RtlDecompressBuffer來解壓縮先前使用RtlCompressBuffer壓縮的緩衝區。我有壓縮代碼,但似乎爲了解壓縮,我需要知道未壓縮數據的大小,因爲函數需要它作爲參數。如何在不知道未壓縮數據大小的情況下使用RtlDecompressBuffer?
如何在不知道未壓縮數據大小的情況下做到這一點? 也許我應該使用RtlDecompressFragment。
代碼示例會很棒!
在此先感謝。
您不需要知道未壓縮數據的大小。你所要做的就是保留足夠的內存來保存所有未壓縮的數據並將其傳遞給API。 如果您的緩衝區不夠大,API將返回STATUS_BAD_COMPRESSION_BUFFER
,然後您必須爲未壓縮的數據分配更大的緩衝區。
爲什麼不向未壓縮大小的緩衝區添加(同時壓縮)簡單頭(前4個字節)?
謝謝,這會做,雖然不完美。 – Grim 2011-05-22 08:05:37
嗨,顯然,這是不完全正確的。看起來有時該函數將返回STATUS_SUCCESS,即使仍然有數據需要解壓縮。我發現的唯一解決方案是預先分配超過壓縮緩衝區的13倍,這是基於假設你不能壓縮任何東西超過92%。 – Grim 2011-09-12 14:56:16