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

Confira também

FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment