Función Decompress (compressapi.h)

Toma un bloque de información comprimida y lo descomprime.

Sintaxis

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 de un descomprimor devuelto por CreateDecompressor.

[in] CompressedData

Contiene el bloque de información que se va a descomprimir. CompressedDataSize asigna el tamaño en bytes del bloque comprimido.

[in] CompressedDataSize

Tamaño en bytes de la información comprimida.

[out] UncompressedBuffer

Búfer que recibe la información sin comprimir. UncompressedBufferSize asigna el tamaño en bytes del búfer.

[in] UncompressedBufferSize

Tamaño en bytes del búfer que recibe la información sin comprimir.

[out] UncompressedDataSize

Tamaño real en bytes de la información sin comprimir recibida.

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero. Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Si el bloque de datos comprimidos al que apunta CompressedData está dañado, la función puede producir un error y el error de GetLastError puede ser ERROR_BAD_COMPRESSION_BUFFER. También es posible que la función genere un bloque de datos sin comprimir que no coincida con los datos originales.

Se recomienda que los compresores y descomprimores no utilicen la marca COMPRESS_RAW . Si el compresor se crea con la marca COMPRESS_RAW , el descomprimor también debe crearse con la marca COMPRESS_RAW .

Si el compresor y el descomprimidor se crean con la marca COMPRESS_RAW , el valor de UncompressedBufferSize debe ser exactamente igual al tamaño original de los datos sin comprimir y no solo el tamaño del búfer de salida. Esto significa que debe guardar el tamaño original exacto de los datos sin comprimir, así como los datos comprimidos y el tamaño comprimido, al usar la marca COMPRESS_RAW . Si UncompressedBufferSize no es igual al tamaño original de los datos sin comprimir, los datos sin comprimir no coincidirán con los datos originales. En este caso, la función puede devolver éxito o puede devolver ERROR_BAD_COMPRESSION_BUFFER.

Si no se usa la marca COMPRESS_RAW , No es necesario que UncompressedBufferSize sea exactamente igual al tamaño original de los datos sin comprimir. En este caso, UncompressedDataSize devuelve el tamaño original de los datos sin comprimir. Si UncompressedBufferSize es menor que el tamaño de datos original, se producirá un error en la función y se establecerá UncompressedDataSize en el tamaño de los datos originales y se ERROR_INSUFFICIENT_BUFFER el error de GetLastError.

Para determinar el tamaño de UncompressedBuffer , llame a la función con UncompressedBufferSize establecido en cero. En este caso, se producirá un error en la función y se establecerá UncompressedDataSize en el tamaño de los datos originales y se ERROR_INSUFFICIENT_BUFFER el error de GetLastError. Tenga en cuenta que el tamaño original devuelto por la función se extrae del propio búfer y debe tratarse como de confianza y probado con límites razonables.

Si se llama a la función con el parámetro CompressedDataSize establecido en cero, se produce un error en la función y se ERROR_INSUFFICIENT_BUFFER el error de GetLastError. Cuando se produce un error, la función devuelve con UncompressedDataSize establecido en un valor que puede usar para evitar asignar demasiado grande un búfer para los datos comprimidos. Debe conocer el tamaño máximo posible de los datos originales para usar este método.

Si establece CompressedDataSize en cero y establece UncompressedBufferSize en el tamaño máximo posible de los datos sin comprimir originales, se producirá un error en la función Decompress como se describe y el valor de UncompressedDataSize se establecerá en el tamaño máximo del búfer de datos comprimido.

Si se produce un error en el algoritmo de compresión por algún motivo interno, el error de GetLastError puede ser ERROR_FUNCTION_FAILED. Si el sistema no puede encontrar el identificador del algoritmo de compresión, el error puede ser ERROR_INVALID_HANDLE. Si el búfer de salida es demasiado pequeño para contener los datos sin comprimir, el error puede ser ERROR_INSUFFICIENT_BUFFER.

Requisitos

   
Cliente mínimo compatible Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado compressapi.h
Library Cabinet.lib
Archivo DLL Cabinet.dll

Consulte también

Funciones de API de compresión