UDF > WinAPIEx > System > Buffer >


_WinAPI_DecompressBuffer

Décompresse un tampon compressé entier

#include <WinAPISys.au3>
_WinAPI_DecompressBuffer ( $pUncompressedBuffer, $iUncompressedSize, $pCompressedBuffer, $iCompressedSize [, $iFormat = 0x0002] )

Paramètres

$pUncompressedBuffer Le pointeur sur le tampon alloué par l'appelant qui reçoit les données décompressées du tampon compressé.
$iUncompressedSize La taille de la mémoire tampon non compressée, en octets.
$pCompressedBuffer Le pointeur sur la mémoire tampon qui contient les données à décompresser.
$iCompressedSize La taille de la mémoire tampon compressée, en octets.
$iFormat [optionnel] Le format de compression des données dans le tampon compressé. Ce paramètre doit prendre l'une des valeurs suivantes:
    $COMPRESSION_FORMAT_LZNT1 (par défaut)
    $COMPRESSION_FORMAT_XPRESS
    $COMPRESSION_FORMAT_XPRESS_HUFF

Valeur de retour

Succès: Retourne la taille des données décompressées stockées dans le tampon non compressé, en octets.
Échec: Retourne 0 et définit @error <> 0, @extended contient le code d'erreur NTSTATUS.

Remarques

La fonction _WinAPI_DecompressBuffer() prend en entrée un buffer compressé entier et produit son équivalent décompressé à condition que les données non compressé rentre dans la mémoire tampon de destination spécifiée.

Pour compresser un tampon non compressé, utilisez la fonction _WinAPI_CompressBuffer().

En relation

_WinAPI_CompressBuffer

Voir aussi

Consultez RtlDecompressBuffer dans la librairie MSDN.

Exemple

#include <APISysConstants.au3>
#include <WinAPIMem.au3>
#include <WinAPISys.au3>

; Crée des tampons compressés et décompressés
Local $a_pBuffer[2]
For $i = 0 To 1
    $a_pBuffer[$i] = _WinAPI_CreateBuffer(1024)
Next

; Compresse des données binaires
Local $dData = Binary('0x00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF')
Local $iSize = BinaryLen($dData)
DllStructSetData(DllStructCreate('byte['& $iSize & ']', $a_pBuffer[0]), 1, $dData)
$iSize = _WinAPI_CompressBuffer($a_pBuffer[0], $iSize, $a_pBuffer[1], 1024, BitOR($COMPRESSION_FORMAT_LZNT1, $COMPRESSION_ENGINE_MAXIMUM))
If Not @error Then
    ConsoleWrite('Compressé:   '& DllStructGetData(DllStructCreate('byte['& $iSize & ']', $a_pBuffer[1]), 1) & @CRLF)
EndIf

; Décompresse les données
$iSize = _WinAPI_DecompressBuffer($a_pBuffer[0], 1024, $a_pBuffer[1], $iSize)
If Not @error Then
    ConsoleWrite('Décompressé: '& DllStructGetData(DllStructCreate('byte['& $iSize & ']', $a_pBuffer[0]), 1) & @CRLF)
EndIf

; Libére la mémoire
For $i = 0 To 1
    _WinAPI_FreeMemory($a_pBuffer[$i])
Next