Función RtlDecompressBufferEx2 (ntifs.h)
La función RtlDecompressBufferEx2 descomprime un búfer comprimido completo, utilizando varios procesadores siempre que sea posible. La compatibilidad con varios procesadores solo se implementa para los autores de llamadas en modo kernel.
Sintaxis
NT_RTL_COMPRESS_API NTSTATUS RtlDecompressBufferEx2(
[in] USHORT CompressionFormat,
[out] PUCHAR UncompressedBuffer,
[in] ULONG UncompressedBufferSize,
[in] PUCHAR CompressedBuffer,
[in] ULONG CompressedBufferSize,
[in] ULONG UncompressedChunkSize,
[out] PULONG FinalUncompressedSize,
[in, optional] PVOID WorkSpace
);
Parámetros
[in] CompressionFormat
Máscara de bits que especifica el formato de compresión del búfer comprimido. Este parámetro debe establecerse en COMPRESSION_FORMAT_LZNT1. El significado de este y otros valores de formato de compresión relacionados son los siguientes.
Valor | Significado |
---|---|
COMPRESSION_FORMAT_NONE | Esta función no es compatible. |
COMPRESSION_FORMAT_DEFAULT | Esta función no es compatible. |
COMPRESSION_FORMAT_LZNT1 | La función realizará la compresión LZ. |
COMPRESSION_FORMAT_XPRESS | La función realizará la compresión Xpress. |
COMPRESSION_FORMAT_XPRESS_HUFF | La función realizará la descompresión de Xpress Huffman. |
[out] UncompressedBuffer
Puntero a un búfer asignado por el autor de la llamada (asignado desde un grupo paginado o no paginado) que recibe los datos descomprimidos de CompressedBuffer. Este parámetro es obligatorio y no puede ser NULL.
[in] UncompressedBufferSize
Tamaño, en bytes, del búfer UncompressedBuffer .
[in] CompressedBuffer
Puntero al búfer que contiene los datos que se van a descomprimir. Este parámetro es obligatorio y no puede ser NULL.
[in] CompressedBufferSize
Tamaño, en bytes, del búfer CompressedBuffer .
[in] UncompressedChunkSize
Tamaño, en bytes, de cada fragmento dentro del búfer de compresión. Los valores válidos son 512, 1024, 2048 y 4096.
[out] FinalUncompressedSize
Puntero a una variable asignada por el autor de la llamada que recibe el tamaño, en bytes, de los datos descomprimidos almacenados en UncompressedBuffer. Este parámetro es obligatorio y no puede ser NULL.
[in, optional] WorkSpace
Puntero a un búfer de espacio de trabajo asignado por el autor de la llamada utilizado por la función RtlDecompressBufferEx2 durante la descompresión. Use la función RtlGetCompressionWorkSpaceSize para determinar el tamaño correcto del búfer de espacio de trabajo.
Valor devuelto
RtlDecompressBufferEx2 devuelve un valor de estado de error adecuado, como uno de los siguientes.
Código devuelto | Descripción |
---|---|
STATUS_SUCCESS | El búfer CompressedBuffer se descomprimió correctamente. |
STATUS_INVALID_PARAMETER | Se especificó un formato de compresión no válido mediante el parámetro CompressionFormat . Si CompressionFormat es COMPRESSION_FORMAT_NONE o COMPRESSION_FORMAT_DEFAULT (pero no ambos), se devuelve este valor. |
STATUS_UNSUPPORTED_COMPRESSION | Se especificó un formato de compresión no válido mediante el parámetro CompressionFormat . Si CompressionFormat no es uno de los siguientes, se devuelve STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF, COMPRESSION_FORMAT_NONE, COMPRESSION_FORMAT_DEFAULT |
STATUS_BAD_COMPRESSION_BUFFER | UncompressedBuffer no es lo suficientemente grande como para contener los datos sin comprimir. |
Comentarios
La función RtlDecompressBufferEx2 toma como entrada un búfer comprimido completo y genera su equivalente descomprimido siempre que los datos sin comprimir se ajusten al búfer de destino especificado.
Para descomprimir solo una parte de un búfer comprimido (es decir, un "fragmento" del búfer), use la función RtlDecompressFragment .
Para comprimir un búfer sin comprimir, use la función RtlCompressBuffer .
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 10 |
Plataforma de destino | Universal |
Encabezado | ntifs.h (incluya Fltkernel.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |