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
압축되지 않은 정보를 수신하는 버퍼입니다. 버퍼의 크기(바이트)는 UncompressedBufferSize에서 지정합니다.
[in] UncompressedBufferSize
압축되지 않은 정보를 수신하는 버퍼의 크기(바이트)입니다.
[out] UncompressedDataSize
받은 압축되지 않은 정보의 실제 크기(바이트)입니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다. 함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 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가 0으로 설정된 함수를 호출합니다. 이 경우 함수가 실패하고 UncompressedDataSize 를 원래 데이터의 크기로 설정하고 GetLastError 의 오류가 ERROR_INSUFFICIENT_BUFFER. 함수에서 반환된 원래 크기는 버퍼 자체에서 추출되며 신뢰할 수 없는 것으로 처리되고 합리적인 제한에 대해 테스트되어야 합니다.
CompressedDataSize 매개 변수를 0으로 설정하여 함수를 호출하면 함수가 실패하고 GetLastError의 오류가 ERROR_INSUFFICIENT_BUFFER. 함수가 실패하면 압축된 데이터에 버퍼가 너무 크게 할당되지 않도록 하는 데 사용할 수 있는 값으로 UncompressedDataSize 가 설정된 상태로 함수가 반환됩니다. 이 메서드를 사용하려면 원래 데이터의 최대 크기를 알고 있어야 합니다.
CompressedDataSize를 0으로 설정하고 UncompressedBufferSize를 원래 압축되지 않은 데이터의 가능한 최대 크기로 설정하면 설명된 대로 압축 해제 함수가 실패하고 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 |