Bagikan melalui


kode kontrol FSCTL_FILE_LEVEL_TRIM

Kode kontrol FSCTL_FILE_LEVEL_TRIM menyediakan metode untuk memangkas rentang data dengan dalam file. Rentang pemangkasan file diterjemahkan ke perangkat penyimpanan yang mendasar yang memungkinkannya mengoptimalkan organisasi sumber dayanya untuk meningkatkan performa akses. Permintaan FSCTL_FILE_LEVEL_TRIM memungkinkan file disk virtual untuk tetap dialokasikan pada ukuran tetap sambil memangkas penyimpanan fisik agar sesuai dengan rentang data yang dibebaskan pada disk virtual.

Untuk melakukan operasi ini, panggil FltFsControlFile atau ZwFsControlFile dengan parameter berikut.

Parameter

  • Instance [in]: FltFsControlFile saja. Penunjuk instans buram untuk pemanggil. Parameter ini diperlukan dan tidak boleh NULL.

  • FileObject [in]: FltFsControlFile saja. Penunjuk objek file ke file yang memiliki data yang akan dipangkas. Parameter ini diperlukan dan tidak boleh NULL.

  • FileHandle [in]: ZwFsControlFile saja. Handel file file yang memiliki data yang akan dipangkas. Parameter ini diperlukan dan tidak boleh NULL.

  • FsControlCode [in]: Kode kontrol untuk operasi. Gunakan FSCTL_FILE_LEVEL_TRIM untuk operasi ini.

  • InputBuffer [in]: Penunjuk ke struktur FILE_LEVEL_TRIM yang berisi array rentang pemangkasan untuk file.

  • InputBufferLength [in]: Ukuran, dalam byte, dari buffer yang diacu oleh parameter InputBuffer . Nilai ini harus setidaknya sizeof(FILE_LEVEL_TRIM).

  • OutputBuffer [out]: Penunjuk ke struktur FILE_LEVEL_TRIM_OUTPUT opsional yang menerima hasil operasi pemangkasan.

  • OutputBufferLength [out]: Ukuran, dalam byte, dari buffer yang diacu oleh parameter OutputBuffer . Nilai ini harus setidaknya sizeof(FILE_LEVEL_TRIM_OUTPUT) jika FILE_LEVEL_TRIM_OUTPUT disertakan dalam OutputBuffer. Jika tidak, ini diatur ke 0.

Blok status

FltFsControlFile atau ZwFsControlFile mengembalikan STATUS_SUCCESS atau mungkin salah satu nilai berikut.

Kode Makna
STATUS_INVALID_PARAMETER File yang akan dipangkas dikompresi atau dienkripsi, panjang buffer input atau output tidak valid, atau, tidak ada rentang pemangkasan yang ditentukan.
STATUS_INSUFFICIENT_RESOURCES Alokasi sumber daya internal gagal.
STATUS_FILE_LOCK_CONFLICT Rentang pemangkasan adalah bagian dari rentang byte yang dikunci sebelumnya.
STATUS_VOLUME_DISMOUNTED Volume tempat file berada tidak dipasang.
STATUS_PURGE_FAILED Pembersihan cache gagal untuk rentang pemangkasan.
STATUS_NO_RANGES_PROCESSED Tidak ada rentang dalam array rentang pemangkasan yang diproses.

Keterangan

Melakukan pemangkasan pada perangkat penyimpanan tertentu dapat secara signifikan meningkatkan performa tulis di masa mendatang. Pemangkasan juga mengembalikan sumber daya ke kumpulan alokasi dalam sistem penyimpanan yang disediakan secara tipis. Ketika file dihapus pada disk virtual, ukuran file disk virtual itu sendiri tidak diubah. Rentang data yang dibebaskan pada disk virtual tidak dipangkas pada penyimpanan fisik tempat file disk virtual berada. Perangkat disk virtual dapat memberi tahu sistem file bahwa rentang data tertentu dalam file disk virtual dapat dipangkas pada perangkat penyimpanan fisik dengan permintaan FSCTL_FILE_LEVEL_TRIM . Sistem file kemudian akan mengeluarkan permintaan pemangkasan ke penyimpanan fisik. Permintaan FSCTL_FILE_LEVEL_TRIM juga dapat dikeluarkan oleh aplikasi layanan yang mengelola file pertukaran database atau memori.

Kode kontrol FSCTL_FILE_LEVEL_TRIM akan mencoba memangkas rentang byte file yang dipilih dari perangkat penyimpanan. Rentang byte terkandung dalam array Rentang dalam struktur FILE_LEVEL_TRIM . Disertakan dalam array Rentang adalah satu atau beberapa struktur FILE_LEVEL_TRIM_RANGE .

Termasuk rentang yang tumpang tindih dalam array rentang belum tentu merupakan kondisi kesalahan. Ini tergantung pada seberapa lama pemrosesan ditangani oleh penyimpanan yang mendasar.

Rentang yang dipangkas dihapus menyeluruh sebagai halaman dari cache sistem file. Untuk mencocokkan ukuran halaman cache, panjang rentang pemangkasan disesuaikan ke kelipatan PAGE_SIZE. Selain itu, jika offset rentang pemangkasan tidak dimulai pada batas halaman, itu diselaraskan ke batas halaman berikutnya. Dengan batasan ini, panjang rentang pemangkasan akan berkurang ketika offsetnya tidak sejajar halaman atau panjangnya bukan ukuran halaman kelipatan. Panjang rentang pemangkasan dapat berkurang menjadi 0 jika panjang asli kurang dari dua halaman dan offset tidak sejajar dengan halaman.

Jika rentang pemangkasan ditentukan atau halaman disesuaikan di luar akhir file (EOF), rentang diabaikan. Namun, offset rentang yang selaras sebelum EOF tetapi memiliki panjang yang diperluas EOF masa lalu akan disesuaikan dengan ukuran halaman multiple <= EOF.

Pemangkasan tingkat file tidak didukung untuk file terkompresi atau terenkripsi (file dengan atribut ATTRIBUTE_FLAG_COMPRESSION_MASK atau ATTRIBUTE_FLAG_ENCRYPTED diatur).

Pemangkasan file dilakukan di luar transaksi apa pun. Operasi pemangkasan tidak dapat digulung balik.

Dengan file jarang (file dengan set atribut ATTRIBUTE_FLAG_SPARSE ), rentang pemangkasan dalam bagian file yang tidak diabaikan.

Ketika disertakan dalam OutputBuffer, anggota NumRangesProcessed dari FILE_LEVEL_TRIM_OUTPUT akan menunjukkan jumlah rentang pemangkasan yang berhasil diproses. Jika terjadi kesalahan selama pemrosesan rentang pemangkasan, NumRangesProcessed akan menentukan indeks awal rentang yang tidak diproses yang tersisa, berakhir pada anggota NumRanges dari FILE_LEVEL_TRIM - 1.

Persyaratan

Jenis persyaratan Persyaratan
Klien minimum yang didukung Windows 8
Header Ntifs.h (termasuk Ntifs.h atau Fltkernel.h)

Lihat juga

FILE_LEVEL_TRIM

FILE_LEVEL_TRIM_OUTPUT

FILE_LEVEL_TRIM_RANGE

FltCreateFile

FltFsControlFile

ZwCreateFile

ZwFsControlFile