Décompresse un tampon compressé entier
#include <WinAPISys.au3>
_WinAPI_DecompressBuffer ( $pUncompressedBuffer, $iUncompressedSize, $pCompressedBuffer, $iCompressedSize [, $iFormat = 0x0002] )
$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 |
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. |
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().
Consultez RtlDecompressBuffer 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