Funzione RtlCompressBuffer (ntifs.h)
La funzione RtlCompressBuffer comprime un buffer e può essere usata da un driver del file system per facilitare l'implementazione della compressione dei file.
Sintassi
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
);
Parametri
[in] CompressionFormatAndEngine
Maschera di bit che specifica il formato di compressione e il tipo di motore. Questo parametro deve essere impostato su una combinazione OR bit per bit valida di un tipo di formato e di un tipo di motore. Ad esempio, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.
I significati di questi valori e altri valori correlati sono i seguenti.
Valore | Significato |
---|---|
COMPRESSION_FORMAT_NONE | Non supportato da questa funzione. |
COMPRESSION_FORMAT_DEFAULT | Non supportato da questa funzione. |
COMPRESSION_FORMAT_LZNT1 | La funzione eseguirà la compressione LZ. |
COMPRESSION_FORMAT_XPRESS | La funzione eseguirà la compressione Xpress. |
COMPRESSION_FORMAT_XPRESS_HUFF | La funzione eseguirà la compressione Xpress Huffman. |
COMPRESSION_ENGINE_STANDARD | Il buffer UncompressedBuffer viene compresso usando un algoritmo che garantisce un equilibrio tra compressione dei dati e prestazioni. Questo valore non può essere usato con COMPRESSION_ENGINE_MAXIMUM. |
COMPRESSION_ENGINE_MAXIMUM | Il buffer uncompressedBuffer viene compresso usando un algoritmo che fornisce la compressione massima dei dati, ma con prestazioni relativamente più lente. Questo valore non può essere utilizzato con COMPRESSION_ENGINE_STANDARD. |
COMPRESSION_ENGINE_HIBER | Non supportato da questa funzione. |
[in] UncompressedBuffer
Puntatore a un buffer allocato dal chiamante (allocato da un pool di paging o non di paging) che contiene i dati da comprimere. Questo parametro è obbligatorio e non può essere NULL.
[in] UncompressedBufferSize
Dimensione, in byte, del buffer UncompressedBuffer.
[out] CompressedBuffer
Puntatore a un buffer allocato dal chiamante (allocato da un pool di paging o non di paging) che riceve i dati compressi. Questo parametro è obbligatorio e non può essere NULL.
[in] CompressedBufferSize
Dimensioni in byte del buffer compresso compressoBuffer.
[in] UncompressedChunkSize
Dimensioni del blocco da usare per comprimere il buffer UncompressedBuffer. Questo parametro deve essere uno dei valori seguenti: 512, 1024, 2048 o 4096. Il sistema operativo usa 4096 e il valore consigliato per questo parametro è anche 4096.
[out] FinalCompressedSize
Puntatore a una variabile allocata dal chiamante che riceve le dimensioni, in byte, dei dati compressi archiviati in CompressedBuffer. Questo parametro è obbligatorio e non può essere NULL.
[in] WorkSpace
Puntatore a un buffer dello spazio di lavoro allocato dal chiamante usato dalla funzione RtlCompressBuffer durante la compressione. Usare la funzioneRtlGetCompressionWorkSpaceSizeper determinare le dimensioni corrette del buffer dello spazio di lavoro.
Valore restituito
RtlCompressBuffer restituisce un valore di stato di errore appropriato, ad esempio uno dei seguenti.
Codice restituito | Descrizione |
---|---|
STATUS_SUCCESS | Il buffer uncompressedBuffer è stato compresso correttamente. |
STATUS_BUFFER_ALL_ZEROS | Il buffer uncompressedBuffer è stato compresso correttamente, ma questo buffer contiene solo zeri. |
STATUS_INVALID_PARAMETER | È stato specificato un formato di compressione non valido tramite il parametro CompressionFormat. Se CompressionFormat è COMPRESSION_FORMAT_NONE o COMPRESSION_FORMAT_DEFAULT (ma non entrambi), questo valore viene restituito. |
STATUS_UNSUPPORTED_COMPRESSION | È stato specificato un formato di compressione non valido tramite il parametro CompressionFormat. Se CompressionFormat non è uno dei seguenti, viene restituito STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS COMPRESSION_FORMAT_XPRESS_HUFF |
STATUS_NOT_SUPPORTED | È stato specificato un motore di compressione non valido tramite il parametro CompressionFormatAndEngine. Se CompressionFormatAndEngine non è COMPRESSION_ENGINE_STANDARD o COMPRESSION_ENGINE_MAXIMUM (ma non entrambi), questo valore viene restituito. |
STATUS_BUFFER_TOO_SMALL | Il buffer compresso è troppo piccolo per contenere i dati compressi. Ovvero, FinalCompressedSize è maggiore di CompressedBufferSize. |
Osservazioni
La funzione RtlCompressBuffer accetta come input un buffer non compresso e produce l'equivalente compresso a condizione che i dati compressi si adattino all'interno del buffer di destinazione specificato.
Per determinare le dimensioni corrette del buffer per il parametro WorkSpace, usare la funzioneRtlGetCompressionWorkSpaceSize.
Per decomprimere un buffer compresso, usare la funzioneRtlDecompressBuffer.
Per estrarre un frammento non compresso da un buffer compresso, usare la funzioneRtlDecompressFragment.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP |
piattaforma di destinazione | Universale |
intestazione | ntifs.h (include Fltkernel.h, Ntifs.h) |
libreria | NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |