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 |