Decompress-Funktion (compressapi.h)

Verwendet einen Block komprimierter Informationen und dekomprimiert ihn.

Syntax

BOOL Decompress(
  [in]  DECOMPRESSOR_HANDLE DecompressorHandle,
  [in]  LPCVOID             CompressedData,
  [in]  SIZE_T              CompressedDataSize,
  [out] PVOID               UncompressedBuffer,
  [in]  SIZE_T              UncompressedBufferSize,
  [out] PSIZE_T             UncompressedDataSize
);

Parameter

[in] DecompressorHandle

Handle an einen Dekomprimierungsor, der von CreateDecompressor zurückgegeben wird.

[in] CompressedData

Enthält den Informationsblock, der dekomprimiert werden soll. Die Größe des komprimierten Blocks in Byte wird von CompressedDataSize angegeben.

[in] CompressedDataSize

Die Größe der komprimierten Informationen in Byte.

[out] UncompressedBuffer

Der Puffer, der die unkomprimierten Informationen empfängt. Die Größe des Puffers in Bytes wird von UncompressedBufferSize angegeben.

[in] UncompressedBufferSize

Größe des Puffers in Bytes, der die nicht komprimierten Informationen empfängt.

[out] UncompressedDataSize

Tatsächliche Größe der empfangenen unkomprimierten Informationen in Byte.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null. Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Wenn der Von CompressedData auf den Komprimierte Datenblock verweist, beschädigt ist, kann die Funktion fehlschlagen, und der Fehler von GetLastError kann ERROR_BAD_COMPRESSION_BUFFER werden. Es ist auch möglich, dass die Funktion einen Block von nicht komprimierten Daten erzeugt, der nicht mit den ursprünglichen Daten übereinstimmt.

Es wird empfohlen, dass Kompressoren und Dekomprimatoren nicht das flag COMPRESS_RAW verwenden. Wenn der Kompressor mit dem flag COMPRESS_RAW erstellt wird, muss der Dekomprimierungsschalter auch mit dem flag COMPRESS_RAW erstellt werden.

Wenn der Kompressor und der Dekomprimierung mithilfe des COMPRESS_RAW-Flags erstellt werden, muss der Wert von UncompressedBufferSize genau der ursprünglichen Größe der unkomprimierten Daten entsprechen und nicht nur der Größe des Ausgabepuffers. Dies bedeutet, dass Sie die genaue Originalgröße der nicht komprimierten Daten sowie die komprimierten Daten und die komprimierte Größe speichern sollten, wenn Sie das flag COMPRESS_RAW verwenden. Wenn UncompressedBufferSize nicht der ursprünglichen Größe der nicht komprimierten Daten entspricht, stimmen die nicht komprimierten Daten nicht mit den ursprünglichen Daten überein. In diesem Fall kann die Funktion erfolg oder ERROR_BAD_COMPRESSION_BUFFER zurückgeben.

Wenn das flag COMPRESS_RAW nicht verwendet wird, muss UncompressedBufferSize nicht genau der ursprünglichen Größe der unkomprimierten Daten entsprechen. In diesem Fall gibt UncompressedDataSize die ursprüngliche Größe der nicht komprimierten Daten zurück. Wenn UncompressedBufferSize kleiner als die ursprüngliche Datengröße ist, schlägt die Funktion fehl und legt UncompressedDataSize auf die Größe der ursprünglichen Daten fest, und der Fehler von GetLastError ist ERROR_INSUFFICIENT_BUFFER.

Um zu bestimmen, wie groß der UncompressedBuffer sein muss, rufen Sie die Funktion auf, bei der UncompressedBufferSize auf Null festgelegt ist. In diesem Fall schlägt die Funktion fehl und legt UncompressedDataSize auf die Größe der ursprünglichen Daten fest, und der Fehler von GetLastError ist ERROR_INSUFFICIENT_BUFFER. Beachten Sie, dass die ursprüngliche Größe, die von der Funktion zurückgegeben wird, aus dem Puffer selbst extrahiert wird und als nicht vertrauenswürdig behandelt und anhand angemessener Grenzwerte getestet werden sollte.

Wenn die Funktion aufgerufen wird, wobei der CompressedDataSize-Parameter auf null festgelegt ist, schlägt die Funktion fehl, und der Fehler von GetLastError wird ERROR_INSUFFICIENT_BUFFER. Wenn die Funktion fehlschlägt, wird uncompressedDataSize auf einen Wert festgelegt, den Sie verwenden können, um zu vermeiden, dass ein zu großer Puffer für die komprimierten Daten zugewiesen wird. Sie müssen die maximal mögliche Größe der ursprünglichen Daten kennen, um diese Methode verwenden zu können.

Wenn Sie CompressedDataSize auf Null und UncompressedBufferSize auf die maximal mögliche Größe der ursprünglichen unkomprimierten Daten festlegen, schlägt die Dekomprimierungsfunktion wie beschrieben fehl, und der Wert von UncompressedDataSize wird auf die maximale Größe für den komprimierten Datenpuffer festgelegt.

Wenn der Komprimierungsalgorithmus aus einem internen Grund fehlschlägt, kann der Fehler von GetLastErrorERROR_FUNCTION_FAILED werden. Wenn das System das Komprimierungsalgorithmushandle nicht finden kann, kann der Fehler ERROR_INVALID_HANDLE werden. Wenn der Ausgabepuffer zu klein ist, um die nicht komprimierten Daten zu speichern, kann der Fehler ERROR_INSUFFICIENT_BUFFER werden.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 8 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile compressapi.h
Bibliothek Cabinet.lib
DLL Cabinet.dll

Weitere Informationen

Komprimierungs-API-Funktionen