Partager via


Fonction RtlDecompressBufferEx2 (ntifs.h)

La fonction RtlDecompressBufferEx2 décompose une mémoire tampon compressée entière à l’aide de plusieurs processeurs, le cas échéant. La prise en charge de plusieurs processeurs est implémentée uniquement pour les appelants en mode noyau.

Syntaxe

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
);

Paramètres

[in] CompressionFormat

Masque de bits qui spécifie le format de compression de la mémoire tampon compressée. Ce paramètre doit être défini sur COMPRESSION_FORMAT_LZNT1. La signification de cette valeur et d’autres valeurs de format de compression associées sont les suivantes.

Valeur Signification
COMPRESSION_FORMAT_NONE Non pris en charge par cette fonction.
COMPRESSION_FORMAT_DEFAULT Non pris en charge par cette fonction.
COMPRESSION_FORMAT_LZNT1 La fonction effectue la compression LZ.
COMPRESSION_FORMAT_XPRESS La fonction effectue une compression Xpress.
COMPRESSION_FORMAT_XPRESS_HUFF La fonction effectue la décompression de Xpress Huffman.

[out] UncompressedBuffer

Pointeur vers une mémoire tampon allouée par l’appelant (allouée à partir d’un pool paginé ou non paginé) qui reçoit les données compressées de CompressedBuffer. Ce paramètre est obligatoire et ne peut pas être NULL.

[in] UncompressedBufferSize

Taille, en octets, de la mémoire tampon UncompressedBuffer.

[in] CompressedBuffer

Pointeur vers la mémoire tampon qui contient les données à décompresser. Ce paramètre est obligatoire et ne peut pas être NULL.

[in] CompressedBufferSize

Taille, en octets, de la mémoire tampon de compressé tampon.

[in] UncompressedChunkSize

Taille, en octets, de chaque bloc dans la mémoire tampon de compression. Les valeurs valides sont 512, 1024, 2048 et 4096.

[out] FinalUncompressedSize

Pointeur vers une variable allouée par l’appelant qui reçoit la taille, en octets, des données compressées stockées dans UncompressedBuffer. Ce paramètre est obligatoire et ne peut pas être NULL.

[in, optional] WorkSpace

Pointeur vers une mémoire tampon d’espace de travail allouée à l’appelant utilisée par la fonction RtlDecompressBufferEx2 pendant la décompression. Utilisez la fonction RtlGetCompressionWorkSpaceSize pour déterminer la taille correcte de la mémoire tampon d’espace de travail.

Valeur de retour

RtlDecompressBufferEx2 retourne une valeur d’état d’erreur appropriée, telle que l’une des suivantes.

Retourner le code Description
STATUS_SUCCESS La mémoire tampon compressée a été correctement compressée.
STATUS_INVALID_PARAMETER Un format de compression non valide a été spécifié via le paramètre CompressionFormat. Si CompressionFormat est COMPRESSION_FORMAT_NONE ou COMPRESSION_FORMAT_DEFAULT (mais pas les deux), cette valeur est retournée.
STATUS_UNSUPPORTED_COMPRESSION Un format de compression non valide a été spécifié via le paramètre CompressionFormat. Si CompressionFormat n’est pas l’un des éléments suivants, STATUS_UNSUPPORTED_COMPRESSION est retourné : COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF, COMPRESSION_FORMAT_NONE, COMPRESSION_FORMAT_DEFAULT
STATUS_BAD_COMPRESSION_BUFFER uncompressedBuffer n’est pas suffisamment volumineux pour contenir les données non compressées.

Remarques

La fonction RtlDecompressBufferEx 2 prend comme entrée une mémoire tampon compressée entière et produit son équivalent compressé, à condition que les données non compressées s’intègrent dans la mémoire tampon de destination spécifiée.

Pour décompresser uniquement une partie d’une mémoire tampon compressée (autrement dit, un « fragment » de la mémoire tampon), utilisez la fonction RtlDecompressFragment.

Pour compresser une mémoire tampon non compressée, utilisez la fonction RtlCompressBuffer.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10
plateforme cible Universel
d’en-tête ntifs.h (include Fltkernel.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

< FILE_COMPRESSION_INFORMATION

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressBufferEx

RtlDecompressFragment

RtlDecompressFragmentEx