Share via


Decompress, fonction (compressapi.h)

Prend un bloc d’informations compressées et les décompose.

Syntaxe

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

Paramètres

[in] DecompressorHandle

Gérez un décompresseur retourné par CreateDecompressor.

[in] CompressedData

Contient le bloc d’informations à décompresser. La taille en octets du bloc compressé est donnée par CompressedDataSize.

[in] CompressedDataSize

Taille en octets des informations compressées.

[out] UncompressedBuffer

Mémoire tampon qui reçoit les informations non compressées. La taille en octets de la mémoire tampon est donnée par UncompressedBufferSize.

[in] UncompressedBufferSize

Taille en octets de la mémoire tampon qui reçoit les informations non compressées.

[out] UncompressedDataSize

Taille réelle en octets des informations non compressées reçues.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro. Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Notes

Si le bloc de données compressées pointée par CompressedData est endommagé, la fonction peut échouer et l’erreur de GetLastError peut être ERROR_BAD_COMPRESSION_BUFFER. Il est également possible que la fonction produise un bloc de données non compressées qui ne correspond pas aux données d’origine.

Il est recommandé que les compresseurs et les décompresseurs n’utilisent pas l’indicateur COMPRESS_RAW . Si le compresseur est créé avec l’indicateur COMPRESS_RAW , le décompresseur doit également être créé avec l’indicateur COMPRESS_RAW .

Si le compresseur et le décompresseur sont créés à l’aide de l’indicateur COMPRESS_RAW , la valeur de UncompressedBufferSize doit être exactement égale à la taille d’origine des données non compressées et pas seulement à la taille de la mémoire tampon de sortie. Cela signifie que vous devez enregistrer la taille d’origine exacte des données non compressées, ainsi que les données compressées et la taille compressée, lorsque vous utilisez l’indicateur COMPRESS_RAW . Si UncompressedBufferSize n’est pas égal à la taille d’origine des données non compressées, les données non compressées ne correspondent pas aux données d’origine. Dans ce cas, la fonction peut retourner la réussite ou retourner ERROR_BAD_COMPRESSION_BUFFER.

Si l’indicateur COMPRESS_RAW n’est pas utilisé, UncompressedBufferSize n’est pas requis pour être exactement égal à la taille d’origine des données non compressées. Dans ce cas, UncompressedDataSize retourne la taille d’origine des données non compressées. Si UncompressedBufferSize est inférieur à la taille des données d’origine, la fonction échoue et définit UncompressedDataSize sur la taille des données d’origine et l’erreur de GetLastError est ERROR_INSUFFICIENT_BUFFER.

Pour déterminer la taille de l’uncompressedBuffer , appelez la fonction avec UncompressedBufferSize défini sur zéro. Dans ce cas, la fonction échoue et définit UncompressedDataSize sur la taille des données d’origine et l’erreur de GetLastError est ERROR_INSUFFICIENT_BUFFER. Notez que la taille d’origine retournée par la fonction est extraite de la mémoire tampon elle-même et doit être traitée comme non approuvée et testée par rapport à des limites raisonnables.

Si la fonction est appelée avec le paramètre CompressedDataSize défini sur zéro, la fonction échoue et l’erreur de GetLastError est ERROR_INSUFFICIENT_BUFFER. En cas d’échec, la fonction retourne avec UncompressedDataSize définie sur une valeur que vous pouvez utiliser pour éviter d’allouer une mémoire tampon trop importante pour les données compressées. Vous devez connaître la taille maximale possible des données d’origine pour utiliser cette méthode.

Si vous définissez CompressedDataSize sur zéro et si vous définissez UncompressedBufferSize sur la taille maximale possible des données non compressées d’origine, la fonction Décompression échoue comme décrit et la valeur de UncompressedDataSize est définie sur la taille maximale de la mémoire tampon de données compressées.

Si l’algorithme de compression échoue pour une raison interne, l’erreur de GetLastError peut être ERROR_FUNCTION_FAILED. Si le système ne peut pas localiser le handle de l’algorithme de compression, l’erreur peut être ERROR_INVALID_HANDLE. Si la mémoire tampon de sortie est trop petite pour contenir les données non compressées, l’erreur peut être ERROR_INSUFFICIENT_BUFFER.

Spécifications

   
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête compressapi.h
Bibliothèque Cabinet.lib
DLL Cabinet.dll

Voir aussi

Fonctions de l’API de compression