Função RtlDecompressBufferEx2 (ntifs.h)

A função RtlDecompressBufferEx2 descompacta um buffer compactado inteiro, usando vários processadores sempre que possível. O suporte a vários processadores só é implementado para chamadores do modo kernel.

Sintaxe

NT_RTL_COMPRESS_API NTSTATUS RtlDecompressBufferEx2(
  [in]           USHORT CompressionFormat,
  [out]          PUCHAR UncompressedBuffer,
  [in]           ULONG  UncompressedBufferSize,
  [in]           PUCHAR CompressedBuffer,
  [in]           ULONG  CompressedBufferSize,
  [in]           ULONG  UncompressedChunkSize,
  [out]          PULONG FinalUncompressedSize,
  [in, optional] PVOID  WorkSpace
);

Parâmetros

[in] CompressionFormat

Uma máscara de bits que especifica o formato de compactação do buffer compactado. Esse parâmetro deve ser definido como COMPRESSION_FORMAT_LZNT1. O significado desse e de outros valores de formato de compactação 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 descompactação Xpress Huffman.

[out] UncompressedBuffer

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

[in] UncompressedBufferSize

O tamanho, em bytes, do buffer UncompressedBuffer .

[in] CompressedBuffer

Um ponteiro para o buffer que contém os dados a serem descompactados. Esse parâmetro é necessário e não pode ser NULL.

[in] CompressedBufferSize

O tamanho, em bytes, do buffer CompressedBuffer .

[in] UncompressedChunkSize

O tamanho, em bytes, de cada parte dentro do buffer de compactação. Os valores válidos são 512, 1024, 2048 e 4096.

[out] FinalUncompressedSize

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

[in, optional] WorkSpace

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

Retornar valor

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

Código de retorno Descrição
STATUS_SUCCESS O buffer CompressedBuffer foi descompactado com êxito.
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, COMPRESSION_FORMAT_NONE COMPRESSION_FORMAT_DEFAULT
STATUS_BAD_COMPRESSION_BUFFER UncompressedBuffer não é grande o suficiente para conter os dados não compactados.

Comentários

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

Para descompactar apenas uma parte de um buffer compactado (ou seja, um "fragmento" do buffer), use a função RtlDecompressFragment .

Para compactar um buffer descompactado, use a função RtlCompressBuffer .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
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

RtlDecompressBufferEx

RtlDecompressFragment

RtlDecompressFragmentEx