IRP_MJ_DEVICE_CONTROL (FS dan driver filter)

Ketika Dikirim

Manajer I/O, komponen sistem operasi lainnya, dan driver mode kernel lainnya mengirim permintaan IRP_MJ_DEVICE_CONTROL. Biasanya IRP ini dikirim atas nama aplikasi mode pengguna yang telah disebut fungsi DeviceIoControl Win32 atau atas nama komponen mode kernel yang telah disebut ZwDeviceIoControlFile.

Operasi: Driver Sistem File

Driver sistem file harus mengekstrak dan mendekode objek file untuk menentukan apakah permintaan telah dikeluarkan pada handel yang merupakan volume terbuka. Jika demikian, driver sistem file harus meneruskan IRP ke driver perangkat untuk perangkat penyimpanan tempat volume dipasang. Jika tidak, driver harus gagal dalam IRP.

Operasi: Driver Filter Sistem File Warisan

Driver filter harus melakukan pemrosesan yang diperlukan dan, tergantung pada sifat filter, baik menyelesaikan IRP atau meneruskannya 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 kontrol perangkat.

  • DeviceObject adalah penunjuk ke objek perangkat target.

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

  • 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 ZwDeviceIoControlFile.

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

  • Irp->RequestorMode menunjukkan mode eksekusi proses yang meminta operasi, baik KernelMode atau UserMode.

  • Irp->UserBuffer menunjuk ke buffer output yang disediakan penelepon untuk diteruskan ke driver perangkat untuk perangkat 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_DEVICE_CONTROL dan tidak boleh digunakan.

  • IrpSp->MajorFunction diatur ke IRP_MJ_DEVICE_CONTROL.

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

  • IrpSp->Parameters.DeviceIoControl.IoControlCode adalah kode fungsi IOCTL yang akan diteruskan ke driver perangkat untuk perangkat target.

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

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

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

Lihat juga

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildDeviceIoControlRequest

IoGetCurrentIrpStackLocation

IoGetFunctionCodeFromCtlCode

IRP

IRP_MJ_DEVICE_CONTROL (Referensi Kernel WDK)

Menggunakan Kode Kontrol I/O

ZwDeviceIoControlFile