IRP_MJ_READ (FS dan driver filter)

Ketika Dikirim

Manajer I/O atau driver sistem file mengirimkan permintaan IRP_MJ_READ. Permintaan ini dapat dikirim, misalnya, ketika aplikasi mode pengguna telah memanggil fungsi Win32 seperti ReadFile, atau ketika komponen mode kernel telah disebut ZwReadFile.

Operasi: Driver Sistem File

Driver sistem file harus mengekstrak dan mendekode objek file untuk menentukan parameter dan kode fungsi minor.

Untuk permintaan baca daftar deskriptor memori (MDL), sistem file harus memeriksa kode fungsi kecil untuk menentukan operasi mana yang diminta. Berikut ini adalah kode fungsi minor yang valid, yang hanya dapat digunakan untuk I/O file cache:

  • IRP_MN_COMPLETE
  • IRP_MN_COMPLETE_MDL
  • IRP_MN_COMPLETE_MDL_DPC
  • IRP_MN_COMPRESSED
  • IRP_MN_DPC
  • IRP_MN_MDL
  • IRP_MN_MDL_DPC
  • IRP_MN_NORMAL

Untuk informasi selengkapnya tentang penanganan IRP ini, pelajari sampel CDFS dan FASTFAT yang disertakan dalam Windows Driver Kit (WDK).

Operasi: Driver Filter Sistem File Warisan

Driver filter harus melakukan pemrosesan yang diperlukan dan, tergantung pada sifat filter, harus melakukan salah satu tindakan berikut:

  • Selesaikan atau gagalkan IRP, atau
  • Teruskan IRP ke driver berikutnya yang lebih rendah pada tumpukan.

Parameter

Sistem file atau driver filter memanggil IoGetCurrentIrpStackLocation untuk IRP yang diberikan untuk mendapatkan penunjuk ke lokasi tumpukannya sendiri di IRP. Dalam parameter berikut, Irp menunjuk ke IRP dan IrpSp menunjuk ke IO_STACK_LOCATION. Driver dapat menggunakan informasi yang diatur dalam anggota IRP berikut dan lokasi tumpukan IRP untuk memproses permintaan baca:

  • DeviceObject adalah penunjuk ke objek perangkat target.

  • Irp->AssociatedIrp.SystemBuffer menunjuk ke buffer yang disediakan sistem untuk digunakan sebagai buffer sistem perantara, jika bendera DO_BUFFERED_IO diatur di DeviceObject-Flags>. Jika tidak, anggota ini diatur ke NULL.

  • Irp->IoStatus menunjuk ke struktur IO_STATUS_BLOCK yang menerima status penyelesaian akhir dan informasi tentang operasi yang diminta. Untuk informasi selengkapnya, lihat deskripsi parameter IoStatusBlock ke ZwReadFile.

  • Irp->MdlAddress adalah alamat daftar deskriptor memori (MDL) yang menjelaskan halaman yang berisi data yang akan dibaca.

  • *Irp->UserBuffer menunjuk ke buffer output yang disediakan penelepon yang menerima data yang dibaca dari file.

  • IrpSp->FileObject menunjuk ke objek file yang terkait dengan DeviceObject. Jika bendera FO_SYNCHRONOUS_IO diatur dalam IrpSp-FileObject-Flags>>, objek file dibuka untuk I/O sinkron.

    Parameter IrpSp-FileObject> berisi penunjuk ke bidang RelatedFileObject, yang juga merupakan struktur FILE_OBJECT. Bidang RelatedFileObject dari struktur FILE_OBJECT tidak valid selama pemrosesan IRP_MJ_READ dan tidak boleh digunakan.

  • IrpSp->MajorFunction diatur ke IRP_MJ_READ.

  • IrpSp->MinorFunction menentukan operasi yang diminta dan berisi salah satu nilai berikut:

  • IRP_MN_COMPLETE

  • IRP_MN_COMPLETE_MDL

  • IRP_MN_COMPLETE_MDL_DPC

  • IRP_MN_COMPRESSED

  • IRP_MN_DPC

  • IRP_MN_MDL

  • IRP_MN_MDL_DPC

  • IRP_MN_NORMAL

  • IrpSp->Parameters.Read.ByteOffset adalah variabel LARGE_INTEGER yang menentukan offset byte awal dalam file data yang akan dibaca.

  • IrpSp->Parameters.Read.Keyadalah nilai kunci yang terkait dengan kunci rentang byte pada file target.

  • IrpSp->Parameters.Read.Length adalah panjang dalam byte data yang akan dibaca. Jika operasi baca berhasil, jumlah byte yang dibaca dikembalikan di anggota Informasi dari struktur IO_STATUS_BLOCK yang ditujukkan oleh Irp-IoStatus>.

Keterangan

Sistem file operasi tulis bulat dan baca di akhir file hingga kelipatan ukuran sektor perangkat penyimpanan file yang mendasar. Saat filter memproses operasi pra-baca atau pra-tulis, filter yang mengalokasikan dan menukar buffer perlu membulatkan ukuran buffer yang dialokasikan ke kelipatan ukuran sektor perangkat terkait. Jika tidak, panjang data yang ditransfer dari sistem file yang mendasar akan melebihi panjang buffer yang dialokasikan. Untuk informasi selengkapnya tentang menukar buffer, lihat swapBuffers Minifilter Sample.

Lihat juga

CcMdlRead

CcMdlReadComplete

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_READ (Referensi Kernel WDK)

IRP_MJ_WRITE

ZwReadFile