Dekomprimiere einen kompletten komprimierten Puffer.
#include <WinAPISys.au3>
_WinAPI_DecompressBuffer ( $pUncompressedBuffer, $iUncompressedSize, $pCompressedBuffer, $iCompressedSize [, $iFormat = 0x0002] )
$pUncompressedBuffer | Ein Zeiger zu einem aufrufer-allokierten Puffer welche die dekomprimierten Daten des komprimierten Puffers erhält. |
$iUncompressedSize | Die Größe des unkomprimierten Puffers in Bytes. |
$pCompressedBuffer | Ein Zeiger zu dem Puffer welches die zu dekomprimierenden Daten beinhaltet. |
$iCompressedSize | Die Größe des komprimierten Puffers in Bytes. |
$iFormat | [optional] Das Komprimierungsformat der Daten im komprimierten Puffer. Dieser Parameter muss einer der folgenden Werte annehmen: $COMPRESSION_FORMAT_LZNT1 (Standard) $COMPRESSION_FORMAT_XPRESS $COMPRESSION_FORMAT_XPRESS_HUFF |
Erfolg: | Die Größe der dekomprimierten Daten welche im unkomprimierten Puffer gespeichert werden, in Bytes. |
Fehler: | 0 und setzt das @error Flag auf ungleich null. @extended kann den NTSTATUS Fehlercode enthalten. |
Die _WinAPI_DecompressBuffer() Funktion nimmt als Eingabe einen komplett komprimierten Puffer und produziert dessen dekomprimiertes Äquivalent vorausgesetzt, dass die unkomprimierten Daten in den angegebenen Zielpuffer passen.
Um einen unkomprimierten Puffer zu komprimieren, sollte man die _WinAPI_CompressBuffer() Funktion verwenden.
Suche nach RtlDecompressBuffer in der MSDN Bibliothek.
#include <APISysConstants.au3>
#include <WinAPIMem.au3>
#include <WinAPISys.au3>
; Create compressed and uncompressed buffers
Local $a_pBuffer[2]
For $i = 0 To 1
$a_pBuffer[$i] = _WinAPI_CreateBuffer(1024)
Next
; Compress binary data
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('Compressed: ' & DllStructGetData(DllStructCreate('byte[' & $iSize & ']', $a_pBuffer[1]), 1) & @CRLF)
EndIf
; Decompress data
$iSize = _WinAPI_DecompressBuffer($a_pBuffer[0], 1024, $a_pBuffer[1], $iSize)
If Not @error Then
ConsoleWrite('Uncompressed: ' & DllStructGetData(DllStructCreate('byte[' & $iSize & ']', $a_pBuffer[0]), 1) & @CRLF)
EndIf
; Free memory
For $i = 0 To 1
_WinAPI_FreeMemory($a_pBuffer[$i])
Next