Fonction RtlCompressBuffer (ntifs.h)

La fonction RtlCompressBuffer compresse une mémoire tampon et peut être utilisée par un pilote de système de fichiers pour faciliter l’implémentation de la compression de fichiers.

Syntaxe

NT_RTL_COMPRESS_API NTSTATUS RtlCompressBuffer(
  [in]  USHORT CompressionFormatAndEngine,
  [in]  PUCHAR UncompressedBuffer,
  [in]  ULONG  UncompressedBufferSize,
  [out] PUCHAR CompressedBuffer,
  [in]  ULONG  CompressedBufferSize,
  [in]  ULONG  UncompressedChunkSize,
  [out] PULONG FinalCompressedSize,
  [in]  PVOID  WorkSpace
);

Paramètres

[in] CompressionFormatAndEngine

Masque de bits qui spécifie le format de compression et le type de moteur. Ce paramètre doit être défini sur une combinaison ou au niveau du bit valide d’un type de format et d’un type de moteur. Par exemple, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

Les significations de ces valeurs et d’autres valeurs 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 la compression Xpress.
COMPRESSION_FORMAT_XPRESS_HUFF La fonction effectue la compression Xpress Huffman.
COMPRESSION_ENGINE_STANDARD La mémoire tampon UncompressedBuffer est compressée à l’aide d’un algorithme qui fournit un équilibre entre la compression des données et les performances. Cette valeur ne peut pas être utilisée avec COMPRESSION_ENGINE_MAXIMUM.
COMPRESSION_ENGINE_MAXIMUM La mémoire tampon UncompressedBuffer est compressée à l’aide d’un algorithme qui fournit une compression de données maximale, mais avec des performances relativement plus lentes. Cette valeur ne peut pas être utilisée avec COMPRESSION_ENGINE_STANDARD.
COMPRESSION_ENGINE_HIBER Non pris en charge par cette fonction.

[in] UncompressedBuffer

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

[in] UncompressedBufferSize

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

[out] CompressedBuffer

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 compressées. 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 de bloc à utiliser lors de la compression de la mémoire tampon UncompressedBuffer . Ce paramètre doit avoir l’une des valeurs suivantes : 512, 1024, 2048 ou 4096. Le système d’exploitation utilise 4096, et la valeur recommandée pour ce paramètre est également 4096.

[out] FinalCompressedSize

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

[in] WorkSpace

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

Valeur retournée

RtlCompressBuffer retourne une erreur appropriée status valeur, par exemple l’une des valeurs suivantes.

Code de retour Description
STATUS_SUCCESS La mémoire tampon UncompressedBuffer a été correctement compressée.
STATUS_BUFFER_ALL_ZEROS La mémoire tampon UncompressedBuffer a été correctement compressée, mais cette mémoire tampon ne contient que des zéros.
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
STATUS_NOT_SUPPORTED Un moteur de compression non valide a été spécifié via le paramètre CompressionFormatAndEngine . Si CompressionFormatAndEngine n’est pas COMPRESSION_ENGINE_STANDARD ou COMPRESSION_ENGINE_MAXIMUM (mais pas les deux), cette valeur est retournée.
STATUS_BUFFER_TOO_SMALL La mémoire tampon compressée est trop petite pour contenir les données compressées. Autrement dit, FinalCompressedSize est supérieur à CompressedBufferSize.

Remarques

La fonction RtlCompressBuffer prend en entrée une mémoire tampon non compressée et produit son équivalent compressé, à condition que les données compressées correspondent à la mémoire tampon de destination spécifiée.

Pour déterminer la taille de mémoire tampon correcte pour le paramètre WorkSpace , utilisez la fonction RtlGetCompressionWorkSpaceSize .

Pour décompresser une mémoire tampon compressée, utilisez la fonction RtlDecompressBuffer .

Pour extraire un fragment non compressé d’une mémoire tampon compressée, utilisez la fonction RtlDecompressFragment .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP
Plateforme cible Universal
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

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize