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 di Xpress Huffman. |
COMPRESSION_ENGINE_STANDARD | Il buffer UncompressedBuffer viene compresso usando un algoritmo che fornisce 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 usato 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
Dimensione, in byte, del buffer CompressedBuffer .
[in] UncompressedChunkSize
Dimensione del blocco da utilizzare per comprimere il buffer UncompressedBuffer . Questo parametro deve essere uno dei valori seguenti: 512, 1024, 2048 o 4096. Il sistema operativo usa 4096 e anche il valore consigliato per questo parametro è 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 funzione RtlGetCompressionWorkSpaceSize per 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), viene restituito questo valore. |
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. |
Commenti
La funzione RtlCompressBuffer accetta come input un buffer non compresso e produce l'equivalente compresso a condizione che i dati compressi si adattino al buffer di destinazione specificato.
Per determinare le dimensioni corrette del buffer per il parametro WorkSpace , usare la funzione RtlGetCompressionWorkSpaceSize .
Per decomprimere un buffer compresso, usare la funzione RtlDecompressBuffer .
Per estrarre un frammento non compresso da un buffer compresso, usare la funzione RtlDecompressFragment .
Requisiti
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 |