Funzione RtlGetCompressionWorkSpaceSize (ntifs.h)

La funzione RtlGetCompressionWorkSpaceSize viene usata per determinare le dimensioni corrette del buffer WorkSpace per le funzioni RtlCompressBuffer e RtlDecompressFragment .

Sintassi

NT_RTL_COMPRESS_API NTSTATUS RtlGetCompressionWorkSpaceSize(
  [in]  USHORT CompressionFormatAndEngine,
  [out] PULONG CompressBufferWorkSpaceSize,
  [out] PULONG CompressFragmentWorkSpaceSize
);

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.

[out] CompressBufferWorkSpaceSize

Puntatore a un buffer allocato dal chiamante che riceve le dimensioni, in byte, necessario per comprimere un buffer. Questo valore viene usato per determinare le dimensioni corrette del buffer WorkSpace di RtlCompressBuffer.

[out] CompressFragmentWorkSpaceSize

Puntatore a un buffer allocato dal chiamante che riceve le dimensioni, in byte, necessario per decomprimere un buffer compresso in un frammento. Questo valore viene usato per determinare le dimensioni corrette del buffer WorkSpace di RtlDecompressFragment. Si noti che la funzione RtlCompressFragment non esiste attualmente.

Valore restituito

RtlGetCompressionWorkSpaceSizerestituisce uno stato di errore appropriato, ad esempio uno dei seguenti:

Codice restituito Descrizione
STATUS_SUCCESS Le dimensioni del buffer necessarie, in byte, sono state restituite correttamente.
STATUS_INVALID_PARAMETER È stato specificato un formato di compressione non valido tramite il parametro CompressionFormatAndEngine . Se CompressionFormatAndEngine è 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 CompressionFormatAndEngine . Se CompressionFormatAndEngine non è uno dei seguenti, viene restituito STATUS_UNSUPPORTED_COMPRESSION: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS COMPRESSION_FORMAT_XPRESS_HUF
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.

Commenti

Le funzioni RtlCompressBuffer e RtlDecompressFragmentrichiedono un buffer dello spazio di lavoro di dimensioni appropriate per comprimere e decomprimere correttamente. Per determinare le dimensioni corrette del buffer dello spazio di lavoro, in byte, chiamare la funzione RtlGetCompressionWorkSpaceSize .

Ad esempio, il parametro WorkSpace della funzione RtlCompressBuffer deve puntare a un buffer dello spazio di lavoro di dimensioni adeguate. Il parametro CompressBufferWorkSpaceSize di RtlGetCompressionWorkSpaceSize fornisce queste dimensioni.

Per comprimere un buffer non compresso, usare la funzione RtlCompressBuffer .

Per decomprimere un buffer compresso, usare la funzione RtlDecompressBuffer .

Per decomprimere solo una parte di un buffer compresso ,ovvero un "frammento" del buffer, 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

RtlCompressBuffer

RtlDecompressBuffer

RtlDecompressFragment