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

Vedi anche

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize