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 |