Share via


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

Confira também

Funções da API de compactação