Função RtlCompressBuffer (ntifs.h)

A função RtlCompressBuffer compacta um buffer e pode ser usada por um driver do sistema de arquivos para facilitar a implementação da compactação de arquivos.

Sintaxe

NT_RTL_COMPRESS_API NTSTATUS RtlCompressBuffer(
  [in]  USHORT CompressionFormatAndEngine,
  [in]  PUCHAR UncompressedBuffer,
  [in]  ULONG  UncompressedBufferSize,
  [out] PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  UncompressedChunkSize,
  [out] PULONG FinalCompressedSize,
  [in]  PVOID  WorkSpace
);

Parâmetros

[in] CompressionFormatAndEngine

Uma máscara de bits que especifica 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.

[in] UncompressedBuffer

Um ponteiro para um buffer alocado pelo chamador (alocado de um pool paginado ou não paginado) que contém os dados a serem compactados. Esse parâmetro é necessário e não pode ser NULL.

[in] UncompressedBufferSize

O tamanho, em bytes, do buffer UncompressedBuffer .

[out] CompressedBuffer

Um ponteiro para um buffer alocado pelo chamador (alocado de um pool paginado ou não paginado) que recebe os dados compactados. Esse parâmetro é necessário e não pode ser NULL.

[in] CompressedBufferSize

O tamanho, em bytes, do buffer CompressedBuffer .

[in] UncompressedChunkSize

O tamanho da parte a ser usada ao compactar o buffer UncompressedBuffer . Esse parâmetro deve ser um dos seguintes valores: 512, 1024, 2048 ou 4096. O sistema operacional usa 4096 e o valor recomendado para esse parâmetro também é 4096.

[out] FinalCompressedSize

Um ponteiro para uma variável alocada pelo chamador que recebe o tamanho, em bytes, dos dados compactados armazenados no CompressedBuffer. Esse parâmetro é necessário e não pode ser NULL.

[in] WorkSpace

Um ponteiro para um buffer de espaço de trabalho alocado pelo chamador usado pela função RtlCompressBuffer durante a compactação. Use a função RtlGetCompressionWorkSpaceSize para determinar o tamanho correto do buffer de espaço de trabalho.

Retornar valor

RtlCompressBuffer retorna um erro apropriado status valor, como um dos seguintes.

Código de retorno Descrição
STATUS_SUCCESS O buffer UncompressedBuffer foi compactado com êxito.
STATUS_BUFFER_ALL_ZEROS O buffer UncompressedBuffer foi compactado com êxito, mas esse buffer contém apenas zeros.
STATUS_INVALID_PARAMETER Um formato de compactação inválido foi especificado por meio do parâmetro CompressionFormat . Se CompressionFormat 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 CompressionFormat . Se CompressionFormat não for um dos seguintes, STATUS_UNSUPPORTED_COMPRESSION será retornado: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS COMPRESSION_FORMAT_XPRESS_HUFF
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.
STATUS_BUFFER_TOO_SMALL O buffer compactado é muito pequeno para manter os dados compactados. Ou seja, FinalCompressedSize é maior que CompressedBufferSize.

Comentários

A função RtlCompressBuffer usa como entrada um buffer descompactado e produz seu equivalente compactado, desde que os dados compactados se encaixem no buffer de destino especificado.

Para determinar o tamanho correto do buffer para o parâmetro WorkSpace , use a função RtlGetCompressionWorkSpaceSize .

Para descompactar um buffer compactado, use a função RtlDecompressBuffer .

Para extrair um fragmento não compactado de um buffer compactado, 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

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize