Compartilhar via


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

Máscara de bits especificando o formato de compactação do buffer compactado. Esse parâmetro deve ser definido como COMPRESSION_FORMAT_LZNT1. O significado deste 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 por chamador (alocado do pool de páginas ou não paged) que recebe os dados descompactados de 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 de CompressedBuffer.

[in] FragmentOffset

O deslocamento baseado em zero, em bytes, do qual o fragmento descompactado 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 por 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.

Valor de retorno

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

Código de retorno Descrição
STATUS_SUCCESS O buffer de do CompressedBuffer foi descompactado com êxito no 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.

Observações

Em relação à funçãortlDecompressBuffer, 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çãoRtlGetCompressionWorkSpaceSize (ou seja, o valor retornado pelo parâmetro RtlGetCompressionWorkSpaceSize).

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

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

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

rtlCompressBuffer

rtlDecompressBuffer

rtlDecompressBufferEx

rtlDecompressBufferEx2

RtlDecompressFragmentEx