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 |