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 |