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 |