UDF > WinAPIEx > System > Buffer >


_WinAPI_CompressBuffer

Compresse un tampon avec le format de compression et le type de moteur spécifiés

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

Paramètres

$pUncompressedBuffer Le pointeur sur le tampon alloué par l'appelant qui contient les données à compresser.
$iUncompressedSize La taille de la mémoire tampon non compressé, en octets.
$pCompressedBuffer Le pointeur sur le tampon alloué par l'appelant qui reçoit les données compressées.
$iCompressedSize La taille de la mémoire tampon compressé, en octets.
$iFormatAndEngine [optionnel] Un masque de bits qui spécifie le format de compression et le type de moteur.
Ce paramètre doit être défini sur un niveau de bit valide ou une combinaison d'un type de format et d'un type de moteur.
    $COMPRESSION_FORMAT_LZNT1 (par défaut)
    $COMPRESSION_FORMAT_XPRESS
    $COMPRESSION_FORMAT_XPRESS_HUFF

    $COMPRESSION_ENGINE_STANDARD (par défaut)
    $COMPRESSION_ENGINE_MAXIMUM

Valeur de retour

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

Remarques

La fonction _WinAPI_CompressBuffer() prend en entrée un tampon non compressé et produit son équivalent compressé à condition que les données compressées rentre à l'intérieur du tampon de destination spécifié.

Pour décompresser un tampon compressé, utilisez la fonction _WinAPI_DecompressBuffer().

En relation

_WinAPI_DecompressBuffer

Voir aussi

Consultez RtlCompressBuffer 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