Share via


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 OR-Kombination aus einem Formattyp und einem Modultyp festgelegt werden. Beispiel: COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

Die Bedeutungen dieser 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 die LZ-Komprimierung aus.
COMPRESSION_FORMAT_XPRESS Die Funktion führt Xpress-Komprimierung aus.
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 bietet. Dieser Wert kann nicht mit COMPRESSION_ENGINE_MAXIMUM verwendet werden.
COMPRESSION_ENGINE_MAXIMUM Der UncompressedBuffer-Puffer wird mithilfe eines Algorithmus komprimiert, der eine maximale Datenkomprimierung bei relativ geringerer 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 (zugeordnet aus einem ausgelagerten oder nicht ausgelagerten 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 Bytes.

[out] CompressedBuffer

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer (zugeordnet aus einem ausgelagerten 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 Bytes.

[in] UncompressedChunkSize

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

[out] FinalCompressedSize

Ein Zeiger auf eine vom Aufrufer zugewiesene Variable, die die Größe der in CompressedBuffer gespeicherten komprimierten Daten in Bytes empfängt. 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 gibt einen entsprechenden Fehler status Wert 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, aber dieser Puffer enthält nur Nullen.
STATUS_INVALID_PARAMETER Mit dem CompressionFormat-Parameter wurde ein ungültiges Komprimierungsformat angegeben. Wenn CompressionFormat entweder COMPRESSION_FORMAT_NONE oder COMPRESSION_FORMAT_DEFAULT ist (aber nicht beide), wird dieser Wert zurückgegeben.
STATUS_UNSUPPORTED_COMPRESSION Mit dem CompressionFormat-Parameter wurde ein ungültiges Komprimierungsformat angegeben. Wenn CompressionFormat keine der folgenden Elemente ist, wird STATUS_UNSUPPORTED_COMPRESSION zurückgegeben: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF
STATUS_NOT_SUPPORTED Eine ungültige Komprimierungs-Engine 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 aufzunehmen. Das heißt, FinalCompressedSize ist größer als CompressedBufferSize.

Hinweise

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

Verwenden Sie die RtlGetCompressionWorkSpaceSize-Funktion, um die richtige Puffergröße für den WorkSpace-Parameter zu bestimmen.

Verwenden Sie die Funktion RtlDecompressBuffer , um einen komprimierten Puffer zu dekomprimieren.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP
Zielplattform Universell
Header ntifs.h (einschließlich Fltkernel.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Weitere Informationen

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize