Bagikan melalui


IRP_MJ_FILE_SYSTEM_CONTROL (FS dan driver filter)

Ketika Dikirim

Manajer I/O, komponen sistem operasi lainnya, dan driver mode kernel lainnya mengirim permintaan IRP_MJ_FILE_SYSTEM_CONTROL. Ini dapat dikirim, misalnya, ketika aplikasi mode pengguna telah memanggil fungsi DeviceIoControl Win32 untuk mengirim permintaan kontrol I/O sistem file (FSCTL).

Operasi: Driver Sistem File

Driver atau pengenal sistem file harus memeriksa kode fungsi kecil untuk menentukan operasi kontrol sistem file mana yang diminta.

Driver sistem file harus menangani kode fungsi kecil berikut:

Kode Deskripsi
IRP_MN_KERNEL_CALL Permintaan ini sama dengan IRP_MN_USER_FS_REQUEST (dijelaskan berikut), kecuali bahwa sumber permintaan adalah komponen kernel tepercaya.
IRP_MN_MOUNT_VOLUME Menunjukkan permintaan pemasangan volume. Jika driver sistem file menerima IRP ini untuk volume yang formatnya tidak cocok dengan sistem file, driver sistem file harus mengembalikan STATUS_UNRECOGNIZED_VOLUME.
IRP_MN_USER_FS_REQUEST Menunjukkan permintaan FSCTL, mungkin atas nama aplikasi mode pengguna yang telah memanggil fungsi DeviceIoControl Microsoft Win32 atau atas nama komponen mode kernel yang telah disebut ZwDeviceIoControlFile atau IoBuildDeviceIoControlRequest. Untuk informasi terperinci tentang permintaan FSCTL, lihat "Kode Kontrol Input dan Output Perangkat" dalam dokumentasi Windows SDK.
IRP_MN_VERIFY_VOLUME Menunjukkan permintaan verifikasi volume. Untuk media yang dapat dilepas, sistem file harus memverifikasi volume ketika mendeteksi bahwa media telah dihapus dan dikembalikan untuk memastikan bahwa volume tersebut masih sama dengan volume yang diketahui. Jika volume telah berubah, sistem file harus membatalkan semua handel yang luar biasa. Ini juga harus mengembalikan kesalahan jika sistem file pada media baru ini telah berubah. Permintaan ini paling sering digunakan untuk drive floppy.

Pengenal sistem file harus menangani kode fungsi kecil berikut:

Kode Deskripsi
IRP_MN_LOAD_FILE_SYSTEM Menunjukkan permintaan sistem load-file.

Driver atau pengenal sistem file harus melakukan operasi yang diminta dan kemudian menyelesaikan IRP.

Operasi: Driver Filter Sistem File Warisan

Driver filter harus meneruskan IRP ini 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 lokasi tumpukan IRP dan IRP berikut untuk memproses permintaan kontrol sistem file:

  • DeviceObject adalah penunjuk ke objek perangkat target.

  • Irp->AssociatedIrp.SystemBuffer menunjuk ke buffer input yang disediakan sistem untuk diteruskan ke sistem file atau driver filter sistem file untuk volume target. Digunakan untuk I/O METHOD_BUFFERED atau METHOD_DIRECT. Apakah parameter ini diperlukan tergantung pada kode kontrol sistem file tertentu.

  • Irp->IoStatus menunjuk ke struktur IO_STATUS_BLOCK yang menerima status penyelesaian akhir dan informasi tentang operasi yang diminta.

  • Irp->MdlAddress adalah alamat daftar deskriptor memori (MDL) yang menjelaskan buffer output yang akan diteruskan ke sistem file atau driver filter sistem file untuk volume target. Digunakan untuk I/O METHOD_DIRECT. Apakah parameter ini diperlukan tergantung pada kode kontrol I/O tertentu.

  • Irp->UserBuffer menunjuk ke buffer output yang disediakan penelepon untuk diteruskan ke sistem file atau driver filter sistem file untuk volume target. Digunakan untuk I/O METHOD_BUFFERED atau METHOD_NEITHER. Apakah parameter ini opsional atau diperlukan tergantung pada kode kontrol I/O tertentu.

  • IrpSp->FileObject menunjuk ke objek file yang terkait dengan DeviceObject.

    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_FILE_SYSTEM_CONTROL dan tidak boleh digunakan.

  • IrpSp->Bendera dapat diatur ke SL_ALLOW_RAW_MOUNT untuk IRP_MN_VERIFY_VOLUME.

  • IrpSp->MajorFunction diatur ke IRP_MJ_FILE_SYSTEM_CONTROL.

  • IrpSp->MinorFunction dapat diatur ke salah satu nilai berikut.

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode adalah kode fungsi FSCTL yang akan diteruskan ke sistem file atau driver filter sistem file untuk volume target. Untuk digunakan hanya dengan IRP_MN_USER_FS_REQUEST.

    Untuk informasi terperinci tentang permintaan IOCTL dan FSCTL, lihat Menggunakan Kode Kontrol I/O dan "Kode Kontrol Input dan Output Perangkat" dalam dokumentasi Windows SDK.

  • IrpSp->Parameters.FileSystemControl.InputBufferLength adalah ukuran dalam byte buffer yang ditunjukkan oleh Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.FileSystemControl.OutputBufferLength adalah ukuran dalam byte buffer yang ditunjukkan oleh Irp-UserBuffer>.

  • IrpSp->Parameters.FileSystemControl.Type3InputBuffer adalah buffer input untuk permintaan mode kernel menggunakan METHOD_NEITHER.

  • IrpSp->Parameters.MountVolume.DeviceObject menunjuk ke objek perangkat untuk perangkat aktual tempat volume akan dipasang. Driver filter sistem file tidak boleh menggunakan parameter ini.

  • IrpSp->Parameters.MountVolume.Vpb menunjuk ke blok parameter volume (VPB) agar volume dipasang. Sistem file yang mendukung media yang dapat dilepas mungkin menggantikan VPB yang sebelumnya digunakan untuk yang diteruskan dalam parameter ini. Pada sistem file tersebut, setelah volume dipasang, pointer ini tidak dapat lagi diasumsikan valid. Driver filter sistem file yang memfilter sistem file ini harus menggunakan parameter ini sebagai berikut: Filter harus menyimpan nilai IrpSp-Parameters.MountVolume.Vpb-RealDevice>> sebelum mengirim IRP ke driver tingkat bawah. Setelah volume berhasil dipasang, filter dapat menggunakan penunjuk ini ke objek perangkat penyimpanan untuk mendapatkan penunjuk VPB yang benar.

  • IrpSp->Parameters.VerifyVolume.DeviceObject menunjuk ke objek perangkat agar volume dapat diverifikasi.

  • IrpSp->Parameters.VerifyVolume.Vpb menunjuk ke VPB agar volume diverifikasi.

Lihat juga

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile