Função Decompress (compressapi.h)
Pega um bloco de informações compactadas e as descompacta.
Sintaxe
BOOL Decompress(
[in] DECOMPRESSOR_HANDLE DecompressorHandle,
[in] LPCVOID CompressedData,
[in] SIZE_T CompressedDataSize,
[out] PVOID UncompressedBuffer,
[in] SIZE_T UncompressedBufferSize,
[out] PSIZE_T UncompressedDataSize
);
Parâmetros
[in] DecompressorHandle
Identificador para um descompactador retornado por CreateDecompressor.
[in] CompressedData
Contém o bloco de informações que deve ser descompactado. O tamanho em bytes do bloco compactado é dado por CompressedDataSize.
[in] CompressedDataSize
O tamanho em bytes das informações compactadas.
[out] UncompressedBuffer
O buffer que recebe as informações descompactadas. O tamanho em bytes do buffer é fornecido por UncompressedBufferSize.
[in] UncompressedBufferSize
Tamanho em bytes do buffer que recebe as informações descompactadas.
[out] UncompressedDataSize
Tamanho real em bytes das informações descompactadas recebidas.
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero. Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
Se o bloco de dados compactados apontado por CompressedData estiver corrompido, a função poderá falhar e o erro de GetLastError poderá ser ERROR_BAD_COMPRESSION_BUFFER. Também é possível que a função produza um bloco de dados descompactados que não corresponde aos dados originais.
É recomendável que os compressores e descompactadores não usem o sinalizador COMPRESS_RAW . Se o compressor for criado com o sinalizador COMPRESS_RAW , o descompactador também deverá ser criado com o sinalizador COMPRESS_RAW .
Se o compressor e o descompactador forem criados usando o sinalizador COMPRESS_RAW , o valor de UncompressedBufferSize deverá ser exatamente igual ao tamanho original dos dados descompactados e não apenas ao tamanho do buffer de saída. Isso significa que você deve salvar o tamanho original exato dos dados descompactados, bem como os dados compactados e o tamanho compactado, ao usar o sinalizador COMPRESS_RAW . Se UncompressedBufferSize não for igual ao tamanho original dos dados descompactados, os dados descompactados não corresponderão aos dados originais. Nesse caso, a função pode retornar êxito ou pode retornar ERROR_BAD_COMPRESSION_BUFFER.
Se o sinalizador COMPRESS_RAW não for usado, UncompressedBufferSize não precisará ser exatamente igual ao tamanho original dos dados descompactados. Nesse caso, UncompressedDataSize retorna o tamanho original dos dados descompactados. Se UncompressedBufferSize for menor que o tamanho dos dados original, a função falhará e definirá UncompressedDataSize para o tamanho dos dados originais e o erro de GetLastError será ERROR_INSUFFICIENT_BUFFER.
Para determinar o tamanho que o UncompressedBuffer precisa ser, chame a função com UncompressedBufferSize definido como zero. Nesse caso, a função falhará e definirá UncompressedDataSize para o tamanho dos dados originais e o erro de GetLastError será ERROR_INSUFFICIENT_BUFFER. Observe que o tamanho original retornado pela função é extraído do próprio buffer e deve ser tratado como não confiável e testado em relação a limites razoáveis.
Se a função for chamada com o parâmetro CompressedDataSize definido como zero, a função falhará e o erro de GetLastErrorserá ERROR_INSUFFICIENT_BUFFER. Quando falha, a função retorna com UncompressedDataSize definido como um valor que você pode usar para evitar alocar um buffer muito grande para os dados compactados. Você deve saber o tamanho máximo possível dos dados originais para usar esse método.
Se você definir CompressedDataSize como zero e definir UncompressedBufferSize como o tamanho máximo possível dos dados não compactados originais, a função Descompactar falhará conforme descrito e o valor de UncompressedDataSize será definido como o tamanho máximo do buffer de dados compactado.
Se o algoritmo de compactação falhar por algum motivo interno, o erro de GetLastError poderá ser ERROR_FUNCTION_FAILED. Se o sistema não conseguir localizar o identificador do algoritmo de compactação, o erro poderá ser ERROR_INVALID_HANDLE. Se o buffer de saída for muito pequeno para conter os dados descompactados, o erro poderá ser ERROR_INSUFFICIENT_BUFFER.
Requisitos
Cliente mínimo com suporte | Windows 8 [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | compressapi.h |
Biblioteca | Cabinet.lib |
DLL | Cabinet.dll |