Compartilhar via


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 por chamador (alocado de um pool de páginas 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 por chamador (alocado do pool de páginas ou não paginados) que recebe os dados compactados. Esse parâmetro é necessário e não pode ser NULL.

[in] CompressedBufferSize

O tamanho, em bytes, do buffer de 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 por 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.

Valor de retorno

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

Código de retorno Descrição
STATUS_SUCCESS O buffer de 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 conter os dados compactados. Ou seja, FinalCompressedSize é maior que CompressedBufferSize.

Observações

A função RtlCompressBuffer usa como entrada um buffer descompactado e produz seu equivalente compactado, desde que os dados compactados se ajustem ao 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çãoRtlDecompressBuffer.

Para extrair um fragmento não compactado de um buffer compactado, use a função RtlDecompressFragment.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP
da Plataforma de Destino Universal
cabeçalho ntifs.h (inclua Fltkernel.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte também

FILE_COMPRESSION_INFORMATION

rtlDecompressBuffer

RtlDecompressFragment

rtlGetCompressionWorkSpaceSize