Bagikan melalui


Fungsi RtlCompressBuffer (ntifs.h)

Fungsi RtlCompressBuffer mengompresi buffer dan dapat digunakan oleh driver sistem file untuk memfasilitasi implementasi kompresi file.

Sintaks

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
);

Parameter

[in] CompressionFormatAndEngine

Bitmask yang menentukan format kompresi dan jenis mesin. Parameter ini harus diatur ke kombinasi bitwise OR yang valid dari satu jenis format dan satu jenis mesin. Misalnya, COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD.

Arti dari ini, dan nilai terkait lainnya, adalah sebagai berikut.

Nilai Makna
COMPRESSION_FORMAT_NONE Tidak didukung oleh fungsi ini.
COMPRESSION_FORMAT_DEFAULT Tidak didukung oleh fungsi ini.
COMPRESSION_FORMAT_LZNT1 Fungsi ini akan melakukan kompresi LZ.
COMPRESSION_FORMAT_XPRESS Fungsi ini akan melakukan kompresi Xpress.
COMPRESSION_FORMAT_XPRESS_HUFF Fungsi ini akan melakukan kompresi Xpress Huffman.
COMPRESSION_ENGINE_STANDARD Buffer UncompressedBuffer dikompresi menggunakan algoritma yang memberikan keseimbangan antara kompresi data dan performa. Nilai ini tidak dapat digunakan dengan COMPRESSION_ENGINE_MAXIMUM.
COMPRESSION_ENGINE_MAXIMUM Buffer UncompressedBuffer dikompresi menggunakan algoritma yang menyediakan kompresi data maksimum tetapi dengan performa yang relatif lebih lambat. Nilai ini tidak dapat digunakan dengan COMPRESSION_ENGINE_STANDARD.
COMPRESSION_ENGINE_HIBER Tidak didukung oleh fungsi ini.

[in] UncompressedBuffer

Penunjuk ke buffer yang dialokasikan penelepon (dialokasikan dari kumpulan halaman atau non-halaman) yang berisi data yang akan dikompresi. Parameter ini diperlukan dan tidak boleh NULL.

[in] UncompressedBufferSize

Ukuran, dalam byte, dari buffer UncompressedBuffer .

[out] CompressedBuffer

Penunjuk ke buffer yang dialokasikan penelepon (dialokasikan dari kumpulan halaman atau non-halaman) yang menerima data terkompresi. Parameter ini diperlukan dan tidak boleh NULL.

[in] CompressedBufferSize

Ukuran, dalam byte, dari buffer CompressedBuffer .

[in] UncompressedChunkSize

Ukuran gugus yang digunakan saat mengompresi buffer UncompressedBuffer . Parameter ini harus menjadi salah satu nilai berikut: 512, 1024, 2048, atau 4096. Sistem operasi menggunakan 4096, dan nilai yang direkomendasikan untuk parameter ini juga 4096.

[out] FinalCompressedSize

Penunjuk ke variabel yang dialokasikan penelepon yang menerima ukuran, dalam byte, dari data terkompresi yang disimpan di CompressedBuffer. Parameter ini diperlukan dan tidak boleh NULL.

[in] WorkSpace

Penunjuk ke buffer ruang kerja yang dialokasikan penelepon yang digunakan oleh fungsi RtlCompressBuffer selama pemadatan. Gunakan fungsi RtlGetCompressionWorkSpaceSize untuk menentukan ukuran buffer ruang kerja yang benar.

Nilai kembali

RtlCompressBuffer mengembalikan nilai status kesalahan yang sesuai, seperti salah satu hal berikut ini.

Menampilkan kode Deskripsi
STATUS_SUCCESS Buffer UncompressedBuffer berhasil dikompresi.
STATUS_BUFFER_ALL_ZEROS Buffer UncompressedBuffer berhasil dikompresi, tetapi buffer ini hanya berisi nol.
STATUS_INVALID_PARAMETER Format kompresi yang tidak valid ditentukan melalui parameter CompressionFormat . Jika CompressionFormat COMPRESSION_FORMAT_NONE atau COMPRESSION_FORMAT_DEFAULT (tetapi tidak keduanya), nilai ini dikembalikan.
STATUS_UNSUPPORTED_COMPRESSION Format kompresi yang tidak valid ditentukan melalui parameter CompressionFormat . Jika CompressionFormat bukan salah satu hal berikut, STATUS_UNSUPPORTED_COMPRESSION dikembalikan: COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS, COMPRESSION_FORMAT_XPRESS_HUFF
STATUS_NOT_SUPPORTED Mesin kompresi yang tidak valid ditentukan melalui parameter CompressionFormatAndEngine . Jika CompressionFormatAndEngine tidak COMPRESSION_ENGINE_STANDARD atau COMPRESSION_ENGINE_MAXIMUM (tetapi tidak keduanya), nilai ini dikembalikan.
STATUS_BUFFER_TOO_SMALL Buffer terkompresi terlalu kecil untuk menyimpan data terkompresi. Artinya, FinalCompressedSize lebih besar dari CompressedBufferSize.

Keterangan

Fungsi RtlCompressBuffer mengambil sebagai input buffer yang tidak dikompresi dan menghasilkan kompresi yang setara asalkan data terkompresi cocok dalam buffer tujuan yang ditentukan.

Untuk menentukan ukuran buffer yang benar untuk parameter WorkSpace , gunakan fungsi RtlGetCompressionWorkSpaceSize .

Untuk mendekompresi buffer terkompresi, gunakan fungsi RtlDecompressBuffer .

Untuk mengekstrak fragmen yang tidak dikompresi dari buffer terkompresi, gunakan fungsi RtlDecompressFragment .

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP
Target Platform Universal
Header ntifs.h (termasuk Fltkernel.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Lihat juga

FILE_COMPRESSION_INFORMATION

RtlDecompressBuffer

RtlDecompressFragment

RtlGetCompressionWorkSpaceSize