Fonction RtlDecompressBufferEx2 (ntifs.h)
La fonction RtlDecompressBufferEx2 décompose une mémoire tampon compressée entière, à l’aide de plusieurs processeurs lorsque cela est possible. 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 est la suivante.
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 la compression Xpress. |
COMPRESSION_FORMAT_XPRESS_HUFF | La fonction effectue la décompression Xpress Huffman. |
[out] UncompressedBuffer
Pointeur vers une mémoire tampon allouée à l’appelant (allouée à partir d’un pool paginé ou non paginé) qui reçoit les données dé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 CompressedBuffer .
[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 à l’appelant qui reçoit la taille, en octets, des données dé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 de l’espace de travail.
Valeur retournée
RtlDecompressBufferEx2 retourne une erreur appropriée status valeur, comme l’une des valeurs suivantes.
Code de retour | Description |
---|---|
STATUS_SUCCESS | La mémoire tampon CompressedBuffer a été correctement dé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 assez grand pour contenir les données non compressées. |
Remarques
La fonction RtlDecompressBufferEx2 prend en entrée une mémoire tampon compressée entière et produit son équivalent décompressé à condition que les données non compressées correspondent à la mémoire tampon de destination spécifiée.
Pour décompresser uniquement une partie d’une mémoire tampon compressée (c’est-à-dire un « fragment » de la mémoire tampon), utilisez la fonction RtlDecompressFragment .
Pour compresser une mémoire tampon non compressée, utilisez la fonction RtlCompressBuffer .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10 |
Plateforme cible | Universal |
En-tête | ntifs.h (include Fltkernel.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |