Decompress 関数 (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
圧縮されていない情報を受け取るバッファー。 バッファーのサイズ (バイト単位) は 、CompressedBufferSize によって指定されます。
[in] UncompressedBufferSize
圧縮されていない情報を受け取るバッファーのサイズ (バイト単位)。
[out] UncompressedDataSize
受信した非圧縮情報の実際のサイズ (バイト単位)。
戻り値
関数が成功すると、戻り値は 0 以外になります。 関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
CompressedData が指す圧縮データのブロックが破損している場合、関数は失敗し、GetLastError からのエラーをERROR_BAD_COMPRESSION_BUFFERできます。 また、元のデータと一致しない圧縮されていないデータのブロックが関数によって生成される可能性もあります。
圧縮機および減圧装置は COMPRESS_RAW フラグを使用しないことをお勧めします。 COMPRESS_RAW フラグを使用してコンプレッサーを作成する場合は、COMPRESS_RAW フラグを使用して圧縮解除器も作成する必要があります。
COMPRESS_RAW フラグを使用して圧縮と圧縮解除を作成する場合、CompressedBufferSize の値は、出力バッファーのサイズだけでなく、圧縮されていないデータの元のサイズと正確に等しい必要があります。 つまり、 COMPRESS_RAW フラグを使用する場合は、圧縮されていないデータの正確な元のサイズと圧縮データと圧縮サイズを保存する必要があります。 CompressedBufferSize が圧縮されていないデータの元のサイズと等しくない場合、圧縮されていないデータは元のデータと一致しません。 この場合、関数は成功を返すか 、ERROR_BAD_COMPRESSION_BUFFER返すことができます。
COMPRESS_RAW フラグを使用しない場合、CompressedBufferSize は、圧縮されていないデータの元のサイズと正確に等しくする必要はありません。 この場合、 CompressedDataSize は圧縮されていないデータの元のサイズを返します。 CompressedBufferSize が元のデータ サイズより小さい場合、関数は失敗し、元のデータのサイズに CompressedDataSize を設定し、GetLastError からのエラーがERROR_INSUFFICIENT_BUFFER。
CompressedBuffer の大きさを確認するには、CompressedBufferSize を 0 に設定して関数を呼び出します。 この場合、関数は失敗し、元のデータのサイズに CompressedDataSize を設定し、 GetLastError からの エラーが ERROR_INSUFFICIENT_BUFFER。 関数によって返される元のサイズはバッファー自体から抽出されるため、信頼されていないものとして扱い、妥当な制限に対してテストする必要があることに注意してください。
CompressedDataSize パラメーターを 0 に設定して関数を呼び出すと、関数は失敗し、GetLastError からのエラーがERROR_INSUFFICIENT_BUFFER。 失敗した場合、関数は、圧縮されたデータにバッファーを割り当てすぎないようにするために使用できる値に設定 された CompressedDataSize を返します。 このメソッドを使用するには、元のデータの最大サイズを把握しておく必要があります。
CompressedDataSize を 0 に設定し、CompressedBufferSize を元の非圧縮データの可能な最大サイズに設定すると、説明に従って Decompress 関数は失敗し、CompressedDataSize の値は圧縮データ バッファーの最大サイズに設定されます。
何らかの内部的な理由で圧縮アルゴリズムが失敗した場合、 GetLastError からの エラーが ERROR_FUNCTION_FAILEDされる可能性があります。 システムで圧縮アルゴリズム ハンドルが見つからない場合は、エラーを ERROR_INVALID_HANDLEできます。 出力バッファーが小さすぎて圧縮されていないデータを保持できない場合は、エラーが ERROR_INSUFFICIENT_BUFFER可能性があります。
要件
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | compressapi.h |
Library | Cabinet.lib |
[DLL] | Cabinet.dll |