Función RtlCompressBuffer (ntifs.h)
La función RtlCompressBuffer comprime un búfer y puede ser utilizado por un controlador del sistema de archivos para facilitar la implementación de la compresión de archivos.
Sintaxis
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
);
Parámetros
[in] CompressionFormatAndEngine
Máscara de bits que especifica el formato de compresión y el tipo de motor. Este parámetro debe establecerse en una combinación OR bit a bit válida de un tipo de formato y un tipo de motor. Por ejemplo, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.
Los significados de estos y otros valores 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 compresión Xpress Huffman. |
COMPRESSION_ENGINE_STANDARD | El búfer UncompressedBuffer se comprime mediante un algoritmo que proporciona un equilibrio entre la compresión de datos y el rendimiento. Este valor no se puede usar con COMPRESSION_ENGINE_MAXIMUM. |
COMPRESSION_ENGINE_MAXIMUM | El búfer UncompressedBuffer se comprime mediante un algoritmo que proporciona la compresión máxima de datos, pero con un rendimiento relativamente más lento. Este valor no se puede usar con COMPRESSION_ENGINE_STANDARD. |
COMPRESSION_ENGINE_HIBER | Esta función no es compatible. |
[in] UncompressedBuffer
Puntero a un búfer asignado por el autor de la llamada (asignado desde un grupo paginado o no paginado) que contiene los datos que se van a comprimir. Este parámetro es obligatorio y no puede ser NULL.
[in] UncompressedBufferSize
Tamaño, en bytes, del búfer UncompressedBuffer .
[out] CompressedBuffer
Puntero a un búfer asignado por el autor de la llamada (asignado desde un grupo paginado o no paginado) que recibe los datos comprimidos. Este parámetro es obligatorio y no puede ser NULL.
[in] CompressedBufferSize
Tamaño, en bytes, del búfer CompressedBuffer .
[in] UncompressedChunkSize
Tamaño del fragmento que se va a usar al comprimir el búfer UncompressedBuffer . Este parámetro debe ser uno de los siguientes valores: 512, 1024, 2048 o 4096. El sistema operativo usa 4096 y el valor recomendado para este parámetro también es 4096.
[out] FinalCompressedSize
Puntero a una variable asignada por el autor de la llamada que recibe el tamaño, en bytes, de los datos comprimidos almacenados en CompressedBuffer. Este parámetro es obligatorio y no puede ser NULL.
[in] WorkSpace
Puntero a un búfer de espacio de trabajo asignado por el autor de la llamada utilizado por la función RtlCompressBuffer durante la compresión. Use la función RtlGetCompressionWorkSpaceSize para determinar el tamaño correcto del búfer de espacio de trabajo.
Valor devuelto
RtlCompressBuffer devuelve un valor de estado de error adecuado, como uno de los siguientes.
Código devuelto | Descripción |
---|---|
STATUS_SUCCESS | El búfer UncompressedBuffer se comprimió correctamente. |
STATUS_BUFFER_ALL_ZEROS | El búfer UncompressedBuffer se comprimió correctamente, pero este búfer contiene solo ceros. |
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 |
STATUS_NOT_SUPPORTED | Se especificó un motor de compresión no válido mediante el parámetro CompressionFormatAndEngine . Si CompressionFormatAndEngine no es COMPRESSION_ENGINE_STANDARD o COMPRESSION_ENGINE_MAXIMUM (pero no ambos), se devuelve este valor. |
STATUS_BUFFER_TOO_SMALL | El búfer comprimido es demasiado pequeño para contener los datos comprimidos. Es decir, FinalCompressedSize es mayor que CompressedBufferSize. |
Comentarios
La función RtlCompressBuffer toma como entrada un búfer sin comprimir y genera su equivalente comprimido siempre que los datos comprimidos se ajusten al búfer de destino especificado.
Para determinar el tamaño de búfer correcto para el parámetro WorkSpace , use la función RtlGetCompressionWorkSpaceSize .
Para descomprimir un búfer comprimido, use la función RtlDecompressBuffer .
Para extraer un fragmento sin comprimir de un búfer comprimido, use la función RtlDecompressFragment .
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP |
Plataforma de destino | Universal |
Encabezado | ntifs.h (incluya Fltkernel.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |