Bagikan melalui


Fungsi FsRtlCopyWrite (ntifs.h)

FsRtlCopyWrite rutin menyalin data dari buffer pengguna ke file yang di-cache.

Sintaks

BOOLEAN FsRtlCopyWrite(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  BOOLEAN          Wait,
  [in]  ULONG            LockKey,
  [in]  PVOID            Buffer,
  [out] PIO_STATUS_BLOCK IoStatus,
  [in]  PDEVICE_OBJECT   DeviceObject
);

Parameter

[in] FileObject

Penunjuk ke objek file untuk file yang di-cache tempat data akan ditulis.

[in] FileOffset

Penunjuk ke variabel yang menentukan offset byte awal dalam file yang di-cache.

[in] Length

Panjang byte data yang akan ditulis.

[in] Wait

Atur ke TRUE jika penelepon dapat dimasukkan ke dalam status tunggu hingga semua data telah disalin, FALSE jika tidak.

[in] LockKey

Nilai yang terkait dengan rentang byte untuk dikunci. Jika rentang untuk mengunci tumpang tindih dengan rentang lain yang sudah dikunci dengan kunci tidak termasuk, atau jika rentang yang akan dibaca adalah subrange dari rentang lain yang sudah dikunci secara tidak termasuk, nilai dalam parameter ini harus menjadi kunci untuk kunci yang tidak termasuk Kunci harus ditahan oleh proses induk utas panggilan. Jika tidak, parameter ini tidak berpengaruh.

[in] Buffer

Penunjuk ke buffer tempat data akan disalin.

[out] IoStatus

Penunjuk ke struktur yang dialokasikan pemanggil yang menerima status penyelesaian akhir dan informasi tentang operasi. Jika data berhasil disalin, IoStatus.Status berisi STATUS_SUCCESS. Jika tidak semua data berhasil disalin, IoStatus.Information berisi jumlah byte aktual yang disalin.

[in] DeviceObject

Penunjuk ke objek perangkat untuk volume yang dipasang yang menyimpan data file.

Nilai kembali

FsRtlCopyWrite mengembalikan TRUE jika permintaan salin selesai, FALSE jika tidak. Perhatikan bahwa nilai pengembalian TRUE tidak selalu berarti bahwa operasi penyalinan berhasil.

Jika FsRtlCopyWrite mengembalikan FALSE, atau jika konten IoStatus menunjukkan bahwa operasi salin gagal, pemanggil harus mengalokasikan IRP tulis alih-alih memanggil FsRtlCopyWrite.

Keterangan

Daripada menerapkan rutinitas penulisan I/O cepat khusus sistem file, pengembang sistem file yang mendukung penembolokan file harus mempertimbangkan untuk menggunakan FsRtlCopyWrite sebagai titik masuk sistem file untuk memproses permintaan tulis I/O yang cepat. Ini mengharuskan driverEntry sistem file rutin mengatur titik masuk FastIoWrite ke FsRtlCopyWrite dalam struktur FAST_IO_DISPATCH objek driver sistem file. Selain itu, sistem file harus melakukan hal berikut:

  1. Untuk setiap file di mana I/O cepat mungkin dilakukan, sistem file harus mengalokasikan dan menginisialisasi struktur FSRTL_COMMON_FCB_HEADER.

    Di sebagian besar sistem file, ini dicapai dengan menyertakan struktur FSRTL_COMMON_FCB_HEADER dalam blok kontrol file (FCB) atau struktur yang sebanding yang digunakan untuk mempertahankan status file terbuka.

    Penyimpanan untuk struktur FSRTL_COMMON_FCB_HEADER biasanya dialokasikan dari kumpulan halaman.

  2. Untuk setiap file di mana I/O cepat mungkin dilakukan, sistem file harus menautkan objek file apa pun untuk file ke struktur FSRTL_COMMON_FCB_HEADER. Ini dilakukan dengan mengatur setiap anggota FsContext objek file untuk menunjuk ke struktur ini (atau ke FCB atau struktur lain yang berisi struktur FSRTL_COMMON_FCB_HEADER).

  3. Saat membuat cache file, sistem file harus mengatur anggota IsFastIoPossible dari struktur FSRTL_COMMON_FCB_HEADER file ke nilai yang sesuai. Nilai ini harus diperbarui sesuai kebutuhan selama file tetap di-cache.

    Secara khusus, sistem file harus mengatur anggota IsFastIoPossible dari struktur FSRTL_COMMON_FCB_HEADER ke FastIoIsQuestionable segera setelah ada kunci rentang byte eksklusif pada file yang di-cache.

Jika Wait is TRUE, FsRtlCopyWrite dijamin akan menyalin data dan mengembalikan TRUE. Jika halaman yang diperlukan dari file yang di-cache sudah berada dalam memori, data akan segera disalin dan tidak ada pemblokiran yang akan terjadi. Jika ada halaman yang diperlukan bukan penduduk, penelepon akan dimasukkan ke dalam status tunggu sampai semua halaman yang diperlukan telah dibuat sebagai penduduk dan data dapat disalin.

Jika Wait is FALSE, FsRtlCopyWrite akan menolak untuk memblokir, dan akan mengembalikan FALSE, jika tidak dapat memperoleh sumber daya utama file atau jika halaman yang diperlukan dari file yang di-cache belum berada dalam memori.

Rutinitas FastIoCheckIfPossible sistem file bertanggung jawab untuk memastikan bahwa rentang byte yang ditentukan oleh FileOffset dan Panjang tidak menyertakan rentang byte yang dikunci secara eksklusif yang pemanggilnya tidak melewati nilai LockKey yang sesuai. Jika sistem file menggunakan rutinitas dukungan FsRtlXxxLockYyy untuk mengelola kunci rentang byte, ini dapat dicapai dengan memanggil FsRtlFastCheckLockForWrite dari rutinitas FastIoCheckIfPossible sebelum memanggil FsRtlCopyRead.

Untuk menyimpan file, gunakan rutinitas CcInitializeCacheMap .

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header ntifs.h (termasuk Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Lihat juga

CcInitializeCacheMap

FsRtlCopyRead

FsRtlFastCheckLockForWrite