Função RtlDecompressFragment (ntifs.h)

A função RtlDecompressFragment é usada para descompactar parte de um buffer compactado (ou seja, um buffer "fragmento").

Sintaxe

NT_RTL_COMPRESS_API NTSTATUS RtlDecompressFragment(
  [in]  USHORT CompressionFormat,
  [out] PUCHAR UncompressedFragment,
  [in]  ULONG  UncompressedFragmentSize,
  [in]  PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  FragmentOffset,
  [out] PULONG FinalUncompressedSize,
  [in]  PVOID  WorkSpace
);

Parâmetros

[in] CompressionFormat

Bitmask especificando 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 Especifica que a compactação deve ser executada. Esse valor é necessário.

[out] UncompressedFragment

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

[in] UncompressedFragmentSize

O tamanho, em bytes, do buffer UncompressedFragment .

[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] FragmentOffset

O deslocamento baseado em zero, em bytes, do qual o fragmento não compactado está sendo extraído. Esse valor de deslocamento é a posição dentro do buffer não compactado original.

[out] FinalUncompressedSize

Um ponteiro para uma variável alocada pelo chamador que recebe o tamanho, em bytes, dos dados descompactados armazenados em UncompressedFragment. 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 RtlDecompressFragment durante a descompactação. Use a função RtlGetCompressionWorkSpaceSize para determinar o tamanho correto do buffer de espaço de trabalho.

Retornar valor

RtlDecompressFragmentretorna um código NTSTATUS apropriado, como um dos seguintes:

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

Comentários

Em relação à função RtlDecompressBuffer , RtlDecompressFragment é usado para descompactar uma parte dos dados de um buffer compactado (em vez de todo o buffer).

Para determinar o tamanho correto do buffer para o parâmetro WorkSpace , use a função RtlGetCompressionWorkSpaceSize (ou seja, o valor retornado pelo parâmetro RtlGetCompressionWorkSpaceSize ).

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

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

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

RtlDecompressBufferEx

RtlDecompressBufferEx2

RtlDecompressFragmentEx