Compartir a través de


Función RtlGetCompressionWorkSpaceSize (ntifs.h)

La función RtlGetCompressionWorkSpaceSize se usa para determinar el tamaño correcto del búfer de WorkSpace para la rtlCompressBuffer y funciones rtlDecompressFragment.

Sintaxis

NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
  [in]  USHORT CompressionFormatAndEngine,
  [out] PULONG CompressBufferWorkSpaceSize,
  [out] PULONG CompressFragmentWorkSpaceSize
);

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 No es compatible con esta función.
COMPRESSION_FORMAT_DEFAULT No es compatible con esta función.
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 No es compatible con esta función.

[out] CompressBufferWorkSpaceSize

Puntero a un búfer asignado por el autor de la llamada que recibe el tamaño, en bytes, necesario para comprimir un búfer. Este valor se usa para determinar el tamaño correcto del búfer de RtlCompressBufferWorkSpace.

[out] CompressFragmentWorkSpaceSize

Puntero a un búfer asignado por el autor de la llamada que recibe el tamaño, en bytes, necesario para descomprimir un búfer comprimido en un fragmento. Este valor se usa para determinar el tamaño correcto de RtlDecompressFragmentel búfer de WorkSpace. Tenga en cuenta que la función RtlCompressFragment no existe actualmente.

Valor devuelto

RtlGetCompressionWorkSpaceSizedevuelve un estado de error adecuado, como uno de los siguientes:

Código devuelto Descripción
STATUS_SUCCESS Los tamaños de búfer necesarios, en bytes, se devolvieron correctamente.
STATUS_INVALID_PARAMETER Se especificó un formato de compresión no válido a través del parámetro compressionFormatAndEngine de. Si compressionFormatAndEngine 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 a través del parámetro compressionFormatAndEngine de. Si compressionFormatAndEngine no es uno de los siguientes, se devuelve STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUF
STATUS_NOT_SUPPORTED Se especificó un motor de compresión no válido a través del parámetro CompressionFormatAndEngine de. Si CompressionFormatAndEngine no es COMPRESSION_ENGINE_STANDARD ni COMPRESSION_ENGINE_MAXIMUM (pero no ambos), se devuelve este valor.

Observaciones

Las funciones RtlCompressBuffer y RtlDecompressFragment requieren un búfer de espacio de trabajo de tamaño adecuado para comprimir y descomprimir correctamente. Para determinar el tamaño correcto del búfer de espacio de trabajo, en bytes, llame a la función RtlGetCompressionWorkSpaceSize.

Por ejemplo, el parámetro WorkSpace de la función de RtlCompressBuffer debe apuntar a un búfer de espacio de trabajo de tamaño adecuado. El parámetro CompressBufferWorkSpaceSize del RtlGetCompressionWorkSpaceS ize proporciona este tamaño.

Para comprimir un búfer sin comprimir, use la funciónRtlCompressBuffer.

Para descomprimir un búfer comprimido, use la funciónrtlDecompressBuffer.

Para descomprimir solo una parte de un búfer comprimido (es decir, un "fragmento" del búfer), use la función RtlDecompressFragment.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP
de la plataforma de destino de Universal
encabezado de ntifs.h (include Fltkernel.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= APC_LEVEL

Consulte también

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

rtlDecompressFragment