RtlGetCompressionWorkSpaceSize-Funktion (ntifs.h)

Die RtlGetCompressionWorkSpaceSize-Funktion wird verwendet, um die richtige Größe des WorkSpace-Puffers für die Funktionen RtlCompressBuffer und RtlDecompressFragment zu bestimmen.

Syntax

NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
  [in]  USHORT CompressionFormatAndEngine,
  [out] PULONG CompressBufferWorkSpaceSize,
  [out] PULONG CompressFragmentWorkSpaceSize
);

Parameter

[in] CompressionFormatAndEngine

Bitmaske, die das Komprimierungsformat und den Modultyp angibt. Dieser Parameter muss auf eine gültige bitweise OR-Kombination aus einem Formattyp und einem Engine-Typ festgelegt werden. Beispiel: COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

Die Bedeutungen dieser und anderer verwandter Werte sind wie folgt:

Wert Bedeutung
COMPRESSION_FORMAT_NONE Wird von dieser Funktion nicht unterstützt.
COMPRESSION_FORMAT_DEFAULT Wird von dieser Funktion nicht unterstützt.
COMPRESSION_FORMAT_LZNT1 Die Funktion führt die LZ-Komprimierung aus.
COMPRESSION_FORMAT_XPRESS Die Funktion führt die 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, aber eine relativ langsamere Leistung bietet. Dieser Wert kann nicht mit COMPRESSION_ENGINE_STANDARD verwendet werden.
COMPRESSION_ENGINE_HIBER Wird von dieser Funktion nicht unterstützt.

[out] CompressBufferWorkSpaceSize

Ein Zeiger auf einen vom Aufrufer zugeordneten Puffer, der die Größe in Bytes empfängt, die zum Komprimieren eines Puffers erforderlich ist. Dieser Wert wird verwendet, um die richtige Größe des WorkSpace-Puffers von RtlCompressBuffer zu bestimmen.

[out] CompressFragmentWorkSpaceSize

Ein Zeiger auf einen vom Aufrufer zugeordneten Puffer, der die Größe in Bytes empfängt, die erforderlich ist, um einen komprimierten Puffer in ein Fragment zu dekomprimieren. Dieser Wert wird verwendet, um die richtige Größe des WorkSpace-Puffers von RtlDecompressFragment zu bestimmen. Beachten Sie, dass die RtlCompressFragment-Funktion derzeit nicht vorhanden ist.

Rückgabewert

RtlGetCompressionWorkSpaceSizegibt einen geeigneten Fehler status zurück, z. B. einen der folgenden:

Rückgabecode Beschreibung
STATUS_SUCCESS Die erforderlichen Puffergrößen in Bytes wurden erfolgreich zurückgegeben.
STATUS_INVALID_PARAMETER Ein ungültiges Komprimierungsformat wurde über den CompressionFormatAndEngine-Parameter angegeben. Wenn CompressionFormatAndEngine entweder COMPRESSION_FORMAT_NONE oder COMPRESSION_FORMAT_DEFAULT ist (aber nicht beide), wird dieser Wert zurückgegeben.
STATUS_UNSUPPORTED_COMPRESSION Ein ungültiges Komprimierungsformat wurde über den CompressionFormatAndEngine-Parameter angegeben. Wenn CompressionFormatAndEngine nicht einer der folgenden Ist, wird STATUS_UNSUPPORTED_COMPRESSION zurückgegeben: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUF
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.

Hinweise

Die Funktionen RtlCompressBuffer und RtlDecompressFragmenterfordern einen ausreichend großen Arbeitsbereichspuffer, um erfolgreich zu komprimieren und zu dekomprimieren. Um die richtige Größe des Arbeitsbereichspuffers in Bytes zu bestimmen, rufen Sie die RtlGetCompressionWorkSpaceSize-Funktion auf .

Beispielsweise muss der WorkSpace-Parameter der RtlCompressBuffer-Funktion auf einen ausreichend großen Arbeitsbereichspuffer verweisen. Der CompressBufferWorkSpaceSize-Parameter von RtlGetCompressionWorkSpaceSize stellt diese Größe bereit.

Um einen unkomprimierten Puffer zu komprimieren, verwenden Sie die RtlCompressBuffer-Funktion .

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

Um nur einen Teil eines komprimierten Puffers (d. h. ein "Fragment" des Puffers) zu dekomprimieren, verwenden Sie die RtlDecompressFragment-Funktion .

Anforderungen

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

Weitere Informationen

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment