Función RtlGetCompressionWorkSpaceSize (ntifs.h)

La función RtlGetCompressionWorkSpaceSize se usa para determinar el tamaño correcto del búfer de WorkSpace para las funciones RtlCompressBuffer y 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 una compresión de datos máxima, 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 WorkSpace de RtlCompressBuffer.

[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 del búfer WorkSpace de RtlDecompressFragment. 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 . 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 . 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 . Si CompressionFormatAndEngine no es COMPRESSION_ENGINE_STANDARD o COMPRESSION_ENGINE_MAXIMUM (pero no ambos), se devuelve este valor.

Comentarios

Las funciones RtlCompressBuffer y RtlDecompressFragmentrequieren 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 RtlCompressBuffer debe apuntar a un búfer de espacio de trabajo de tamaño adecuado. El parámetro CompressBufferWorkSpaceSize del rtlGetCompressionWorkSpaceSize proporciona este tamaño.

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

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

Para descomprimir solo una parte de un búfer comprimido (es decir, un "fragmento" del búfer), 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

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment