Condividi tramite


Funzione Decompress (compressapi.h)

Accetta un blocco di informazioni compresse e la decomprime.

Sintassi

BOOL Decompress(
  [in]  DECOMPRESSOR_HANDLE DecompressorHandle,
  [in]  LPCVOID             CompressedData,
  [in]  SIZE_T              CompressedDataSize,
  [out] PVOID               UncompressedBuffer,
  [in]  SIZE_T              UncompressedBufferSize,
  [out] PSIZE_T             UncompressedDataSize
);

Parametri

[in] DecompressorHandle

Handle in un decompressore restituito da CreateDecompressor.

[in] CompressedData

Contiene il blocco di informazioni da decomprimere. Le dimensioni in byte del blocco compresso vengono date da CompressedDataSize.

[in] CompressedDataSize

Dimensione in byte delle informazioni compresse.

[out] UncompressedBuffer

Buffer che riceve le informazioni non compresse. Le dimensioni in byte del buffer vengono date da UncompressedBufferSize.

[in] UncompressedBufferSize

Dimensioni in byte del buffer che riceve le informazioni non compresse.

[out] UncompressedDataSize

Dimensioni effettive in byte delle informazioni non compresse ricevute.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero. Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Se il blocco di dati compressi a cui punta CompressedData è danneggiato , la funzione può avere esito negativo e l'errore di GetLastError può essere ERROR_BAD_COMPRESSION_BUFFER. È anche possibile che la funzione producano un blocco di dati non compressi che non corrispondono ai dati originali.

È consigliabile che i compressori e i decompressori non usino il flag COMPRESS_RAW . Se il compressore viene creato con il flag COMPRESS_RAW , è necessario creare anche il decompressore con il flag COMPRESS_RAW .

Se il compressore e il decompressore vengono creati utilizzando il flag COMPRESS_RAW , il valore di UncompressedBufferSize deve essere esattamente uguale alle dimensioni originali dei dati non compressi e non solo alle dimensioni del buffer di output. Ciò significa che è necessario salvare le dimensioni originali esatte dei dati non compressi, nonché i dati compressi e le dimensioni compresse, quando si usa il flag COMPRESS_RAW . Se UncompressedBufferSize non corrisponde alla dimensione originale dei dati non compressi, i dati non compressi non corrispondono ai dati originali. In questo caso, la funzione può restituire l'esito positivo o può restituire ERROR_BAD_COMPRESSION_BUFFER.

Se il flag COMPRESS_RAW non viene utilizzato, non è necessario che UncompressedBufferSize sia esattamente uguale alla dimensione originale dei dati non compressi. In questo caso, UncompressedDataSize restituisce le dimensioni originali dei dati non compressi. Se UncompressedBufferSize è inferiore alle dimensioni dei dati originali, la funzione avrà esito negativo e imposterà UncompressedDataSize sulle dimensioni dei dati originali e l'errore di GetLastError è ERROR_INSUFFICIENT_BUFFER.

Per determinare la dimensione di UncompressedBuffer , chiamare la funzione con UncompressedBufferSize impostato su zero. In questo caso, la funzione avrà esito negativo e imposterà UncompressedDataSize sulle dimensioni dei dati originali e l'errore di GetLastError è ERROR_INSUFFICIENT_BUFFER. Si noti che le dimensioni originali restituite dalla funzione vengono estratte dal buffer stesso e devono essere considerate come non attendibili e testate in base a limiti ragionevoli.

Se la funzione viene chiamata con il parametro CompressedDataSize impostato su zero, la funzione ha esito negativo e l'errore di GetLastError viene ERROR_INSUFFICIENT_BUFFER. Quando ha esito negativo, la funzione restituisce con UncompressedDataSize impostato su un valore che è possibile usare per evitare l'allocazione di un buffer troppo grande per i dati compressi. Per usare questo metodo, è necessario conoscere la dimensione massima possibile dei dati originali.

Se si imposta CompressedDataSize su zero e si imposta UncompressedBufferSize sulla dimensione massima possibile dei dati non compressi originali, la funzione Decompress avrà esito negativo come descritto e il valore di UncompressedDataSize verrà impostato sulla dimensione massima per il buffer di dati compresso.

Se l'algoritmo di compressione non riesce per qualche motivo interno, l'errore di GetLastError può essere ERROR_FUNCTION_FAILED. Se il sistema non riesce a individuare l'handle dell'algoritmo di compressione, l'errore può essere ERROR_INVALID_HANDLE. Se il buffer di output è troppo piccolo per contenere i dati non compressi, l'errore può essere ERROR_INSUFFICIENT_BUFFER.

Requisiti

   
Client minimo supportato Windows 8 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione compressapi.h
Libreria Cabinet.lib
DLL Cabinet.dll

Vedi anche

Funzioni API di compressione