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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk