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 |