Freigeben über


RtlCompressBuffer-Funktion (ntifs.h)

Die RtlCompressBuffer Funktion komprimiert einen Puffer und kann von einem Dateisystemtreiber verwendet werden, um die Implementierung der Dateikomprimierung zu erleichtern.

Syntax

NT_RTL_COMPRESS_API NTSTATUS RtlCompressBuffer(
  [in]  USHORT CompressionFormatAndEngine,
  [in]  PUCHAR UncompressedBuffer,
  [in]  ULONG  UncompressedBufferSize,
  [out] PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  UncompressedChunkSize,
  [out] PULONG FinalCompressedSize,
  [in]  PVOID  WorkSpace
);

Parameter

[in] CompressionFormatAndEngine

Eine Bitmaske, die das Komprimierungsformat und den Modultyp angibt. Dieser Parameter muss auf eine gültige bitweise ODER-Kombination eines Formattyps und eines Modultyps festgelegt werden. Beispiel: COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

Die Bedeutungen dieser Werte und anderer verwandter Werte sind wie folgt.

Wert Bedeutung
COMPRESSION_FORMAT_NONE Von dieser Funktion nicht unterstützt.
COMPRESSION_FORMAT_DEFAULT Von dieser Funktion nicht unterstützt.
COMPRESSION_FORMAT_LZNT1 Die Funktion führt LZ-Komprimierung durch.
COMPRESSION_FORMAT_XPRESS Die Funktion führt Xpress-Komprimierung durch.
COMPRESSION_FORMAT_XPRESS_HUFF Die Funktion führt die Xpress Huffman-Komprimierung aus.
COMPRESSION_ENGINE_STANDARD Der UncompressedBuffer Puffer wird mithilfe eines Algorithmus komprimiert, der ein Gleichgewicht zwischen Datenkomprimierung und Leistung ermöglicht. Dieser Wert kann nicht mit COMPRESSION_ENGINE_MAXIMUM verwendet werden.
COMPRESSION_ENGINE_MAXIMUM Der UncompressedBuffer Puffer wird mithilfe eines Algorithmus komprimiert, der maximale Datenkomprimierung, aber mit relativ langsamerer Leistung bietet. Dieser Wert kann nicht mit COMPRESSION_ENGINE_STANDARD verwendet werden.
COMPRESSION_ENGINE_HIBER Von dieser Funktion nicht unterstützt.

[in] UncompressedBuffer

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer (zugewiesen aus seitenseitigem oder nicht ausgelagertem Pool), der die zu komprimierenden Daten enthält. Dieser Parameter ist erforderlich und darf nicht NULL sein.

[in] UncompressedBufferSize

Die Größe des "UncompressedBuffer" Puffers in Byte.

[out] CompressedBuffer

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer (zugewiesen vom seitenseitigen oder nicht ausgelagerten Pool), der die komprimierten Daten empfängt. Dieser Parameter ist erforderlich und darf nicht NULL sein.

[in] CompressedBufferSize

Die Größe des CompressedBuffer- Puffers in Byte.

[in] UncompressedChunkSize

Die blockgröße, die beim Komprimieren des UncompressedBuffer- Puffers verwendet werden soll. Dieser Parameter muss einen der folgenden Werte aufweisen: 512, 1024, 2048 oder 4096. Das Betriebssystem verwendet 4096, und der empfohlene Wert für diesen Parameter ist auch 4096.

[out] FinalCompressedSize

Ein Zeiger auf eine vom Aufrufer zugewiesene Variable, die die Größe der komprimierten Daten in Bytes empfängt, die in CompressedBuffergespeichert sind. Dieser Parameter ist erforderlich und darf nicht NULL sein.

[in] WorkSpace

Ein Zeiger auf einen vom Aufrufer zugewiesenen Arbeitsraumpuffer, der von der RtlCompressBuffer--Funktion während der Komprimierung verwendet wird. Verwenden Sie die RtlGetCompressionWorkSpaceSize Funktion, um die richtige Größe des Arbeitsraumpuffers zu bestimmen.

Rückgabewert

RtlCompressBuffer einen geeigneten Fehlerstatuswert zurück, z. B. einen der folgenden.

Rückgabecode Beschreibung
STATUS_SUCCESS Der UncompressedBuffer Puffer wurde erfolgreich komprimiert.
STATUS_BUFFER_ALL_ZEROS Der UncompressedBuffer Puffer wurde erfolgreich komprimiert, dieser Puffer enthält jedoch nur Nullen.
STATUS_INVALID_PARAMETER Ein ungültiges Komprimierungsformat wurde über den parameter CompressionFormat angegeben. Wenn CompressionFormat- entweder COMPRESSION_FORMAT_NONE oder COMPRESSION_FORMAT_DEFAULT (aber nicht beide) ist, wird dieser Wert zurückgegeben.
STATUS_UNSUPPORTED_COMPRESSION Ein ungültiges Komprimierungsformat wurde über den parameter CompressionFormat angegeben. Wenn CompressionFormat- nicht einer der folgenden ist, wird STATUS_UNSUPPORTED_COMPRESSION zurückgegeben: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF
STATUS_NOT_SUPPORTED Ein ungültiges Komprimierungsmodul wurde über den CompressionFormatAndEngine Parameter angegeben. Wenn CompressionFormatAndEngine nicht COMPRESSION_ENGINE_STANDARD oder COMPRESSION_ENGINE_MAXIMUM ist (aber nicht beide), wird dieser Wert zurückgegeben.
STATUS_BUFFER_TOO_SMALL Der komprimierte Puffer ist zu klein, um die komprimierten Daten zu speichern. Das heißt, FinalCompressedSize ist größer als CompressedBufferSize.

Bemerkungen

Die RtlCompressBuffer- Funktion übernimmt als Eingabe einen nicht komprimierten Puffer und erzeugt ihr komprimiertes Äquivalent, vorausgesetzt, die komprimierten Daten passen in den angegebenen Zielpuffer.

Um die richtige Puffergröße für den WorkSpace--Parameter zu ermitteln, verwenden Sie die RtlGetCompressionWorkSpaceSize-Funktion.

Um einen komprimierten Puffer zu dekomprimieren, verwenden Sie die RtlDecompressBuffer Funktion.

Um ein nicht komprimiertes Fragment aus einem komprimierten Puffer zu extrahieren, verwenden Sie die RtlDecompressFragment--Funktion.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP
Zielplattform- Universal
Header- ntifs.h (einschließlich Fltkernel.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL

Siehe auch

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize