Compartir a través de


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

Consulte también

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize