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] )
$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 |
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. |
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().
Consultez RtlCompressBuffer dans la librairie MSDN.
#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