Função RtlGetCompressionWorkSpaceSize (ntifs.h)
A função RtlGetCompressionWorkSpaceSize é usada para determinar o tamanho correto do buffer do WorkSpace para as funções RtlCompressBuffer e RtlDecompressFragment .
Sintaxe
NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
[in] USHORT CompressionFormatAndEngine,
[out] PULONG CompressBufferWorkSpaceSize,
[out] PULONG CompressFragmentWorkSpaceSize
);
Parâmetros
[in] CompressionFormatAndEngine
Bitmask especificando o formato de compactação e o tipo de mecanismo. Esse parâmetro deve ser definido como uma combinação OR bit a bit válida de um tipo de formato e um tipo de mecanismo. Por exemplo, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.
Os significados desses e de outros valores relacionados são os seguintes:
Valor | Significado |
---|---|
COMPRESSION_FORMAT_NONE | Não há suporte para essa função. |
COMPRESSION_FORMAT_DEFAULT | Não há suporte para essa função. |
COMPRESSION_FORMAT_LZNT1 | A função executará a compactação LZ. |
COMPRESSION_FORMAT_XPRESS | A função executará a compactação Xpress. |
COMPRESSION_FORMAT_XPRESS_HUFF | A função executará a compactação Xpress Huffman. |
COMPRESSION_ENGINE_STANDARD | O buffer UncompressedBuffer é compactado usando um algoritmo que fornece um equilíbrio entre a compactação de dados e o desempenho. Esse valor não pode ser usado com COMPRESSION_ENGINE_MAXIMUM. |
COMPRESSION_ENGINE_MAXIMUM | O buffer UncompressedBuffer é compactado usando um algoritmo que fornece compactação máxima de dados, mas com desempenho relativamente mais lento. Esse valor não pode ser usado com COMPRESSION_ENGINE_STANDARD. |
COMPRESSION_ENGINE_HIBER | Não há suporte para essa função. |
[out] CompressBufferWorkSpaceSize
Um ponteiro para um buffer alocado pelo chamador que recebe o tamanho, em bytes, necessário para compactar um buffer. Esse valor é usado para determinar o tamanho correto do buffer do WorkSpace do RtlCompressBuffer.
[out] CompressFragmentWorkSpaceSize
Um ponteiro para um buffer alocado pelo chamador que recebe o tamanho, em bytes, necessário para descompactar um buffer compactado em um fragmento. Esse valor é usado para determinar o tamanho correto do buffer workspace de RtlDecompressFragment. Observe que a função RtlCompressFragment não existe no momento.
Retornar valor
RtlGetCompressionWorkSpaceSizeretorna um erro apropriado status, como um dos seguintes:
Código de retorno | Descrição |
---|---|
STATUS_SUCCESS | Os tamanhos de buffer necessários, em bytes, foram retornados com êxito. |
STATUS_INVALID_PARAMETER | Um formato de compactação inválido foi especificado por meio do parâmetro CompressionFormatAndEngine . Se CompressionFormatAndEngine for COMPRESSION_FORMAT_NONE ou COMPRESSION_FORMAT_DEFAULT (mas não ambos), esse valor será retornado. |
STATUS_UNSUPPORTED_COMPRESSION | Um formato de compactação inválido foi especificado por meio do parâmetro CompressionFormatAndEngine . Se CompressionFormatAndEngine não for um dos seguintes, STATUS_UNSUPPORTED_COMPRESSION será retornado: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS COMPRESSION_FORMAT_XPRESS_HUF |
STATUS_NOT_SUPPORTED | Um mecanismo de compactação inválido foi especificado por meio do parâmetro CompressionFormatAndEngine . Se CompressionFormatAndEngine não for COMPRESSION_ENGINE_STANDARD ou COMPRESSION_ENGINE_MAXIMUM (mas não ambos), esse valor será retornado. |
Comentários
As funções RtlCompressBuffer e RtlDecompressFragmentexigem um buffer de espaço de trabalho de tamanho apropriado para compactar e descompactar com êxito. Para determinar o tamanho correto do buffer de espaço de trabalho, em bytes, chame a função RtlGetCompressionWorkSpaceSize .
Por exemplo, o parâmetro WorkSpace da função RtlCompressBuffer deve apontar para um buffer de espaço de trabalho de tamanho adequado. O parâmetro CompressBufferWorkSpaceSize do RtlGetCompressionWorkSpaceSize fornece esse tamanho.
Para compactar um buffer descompactado, use a função RtlCompressBuffer .
Para descompactar um buffer compactado, use a função RtlDecompressBuffer .
Para descompactar apenas uma parte de um buffer compactado (ou seja, um "fragmento" do buffer), use a função RtlDecompressFragment .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP |
Plataforma de Destino | Universal |
Cabeçalho | ntifs.h (inclua Fltkernel.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |