RtlDecompressFragment-Funktion (ntifs.h)
Die RtlDecompressFragment Funktion wird verwendet, um einen Teil eines komprimierten Puffers zu dekomprimieren (d. a. ein Pufferfragment).
Syntax
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragment(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedFragment,
[in] ULONG UncompressedFragmentSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG FragmentOffset,
[out] PULONG FinalUncompressedSize,
[in] PVOID WorkSpace
);
Parameter
[in] CompressionFormat
Bitmaske, die das Komprimierungsformat des komprimierten Puffers angibt. Dieser Parameter muss auf COMPRESSION_FORMAT_LZNT1 festgelegt werden. Die Bedeutung dieses und anderer verwandter Komprimierungsformatwerte 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 | Gibt an, dass die Komprimierung ausgeführt werden soll. Dieser Wert ist erforderlich. |
[out] UncompressedFragment
Zeiger auf einen vom Aufrufer zugewiesenen Puffer (zugewiesen vom seitenseitigen oder nicht ausgelagerten Pool), der die dekomprimierten Daten von CompressedBufferempfängt. Dieser Parameter ist erforderlich und darf nicht NULL sein.
[in] UncompressedFragmentSize
Die Größe des "UncompressedFragment" Puffers in Byte.
[in] CompressedBuffer
Ein Zeiger auf den Puffer, der die zu dekomprimierenden Daten enthält. Dieser Parameter ist erforderlich und darf nicht NULL sein.
[in] CompressedBufferSize
Die Größe des CompressedBuffer- Puffers in Byte.
[in] FragmentOffset
Der nullbasierte Offset in Bytes, aus dem das nicht komprimierte Fragment extrahiert wird. Dieser Offsetwert ist die Position innerhalb des ursprünglichen nicht komprimierten Puffers.
[out] FinalUncompressedSize
Ein Zeiger auf eine vom Aufrufer zugewiesene Variable, die die Größe der dekomprimierten Daten in Bytes empfängt, die in UncompressedFragmentgespeichert sind. Dieser Parameter ist erforderlich und darf nicht NULL sein.
[in] WorkSpace
Ein Zeiger auf einen vom Aufrufer zugewiesenen Arbeitsraumpuffer, der vom RtlDecompressFragment Funktion während der Dekomprimierung verwendet wird. Verwenden Sie die RtlGetCompressionWorkSpaceSize Funktion, um die richtige Größe des Arbeitsraumpuffers zu bestimmen.
Rückgabewert
RtlDecompressFragmentgibt einen geeigneten NTSTATUS-Code zurück, z. B. einen der folgenden:
Rückgabecode | Beschreibung |
---|---|
STATUS_SUCCESS | Der CompressedBuffer Puffer wurde erfolgreich in UncompressedFragment-dekomprimiert. |
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 |
STATUS_BAD_COMPRESSION_BUFFER | "UncompressedFragment" nicht groß genug ist, um die nicht komprimierten Daten zu enthalten. |
Bemerkungen
Relativ zur RtlDecompressBuffer- Funktion wird RtlDecompressFragment- zum Dekomprimieren eines Teils der Daten aus einem komprimierten Puffer (im Gegensatz zum gesamten Puffer) verwendet.
Um die richtige Puffergröße für den WorkSpace-Parameter zu ermitteln, verwenden Sie die RtlGetCompressionWorkSpaceSize-Funktion (d. a. den wert, der vom RtlGetCompressionWorkSpaceSize Parameter zurückgegeben wird).
Um einen nicht komprimierten Puffer zu komprimieren, verwenden Sie die RtlCompressBuffer Funktion.
Um einen gesamten komprimierten Puffer zu dekomprimieren, verwenden Sie die RtlDecompressBuffer--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 |