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 |