IRP_MJ_PNP (FS dan driver filter)

Ketika Dikirim

Manajer Plug and Play mengirimkan permintaan IRP_MJ_PNP setiap kali aktivitas Plug and Play terjadi pada sistem. Komponen sistem operasi lainnya dan driver mode kernel lainnya juga dapat mengirim permintaan IRP_MJ_PNP tertentu, tergantung pada kode fungsi kecil.

Untuk informasi selengkapnya tentang persyaratan pemrosesan IRP Plug and Play untuk driver, lihat Plug and Play.

Untuk informasi referensi tentang IRP_MJ_PNP kode fungsi minor, lihat Plug and Play Runtime integrasi Kecil.

Operasi: Driver Sistem File

Sistem file harus memeriksa kode fungsi kecil untuk menentukan operasi mana yang diminta. Sistem file harus menangani kode fungsi kecil berikut:

Kode Deskripsi
IRP_MN_CANCEL_REMOVE_DEVICE Menunjukkan bahwa permintaan perangkat penghapusan kueri sebelumnya dibatalkan. Permintaan ini dikirim untuk memperingatkan sistem file jika perlu melakukan pembersihan apa pun yang terkait dengan pembatalan.
IRP_MN_QUERY_REMOVE_DEVICE Menunjukkan bahwa perangkat akan dihapus. Jika sistem file dipasang pada perangkat, Manajer PnP mengirimkan permintaan ini ke sistem file dan ke filter sistem file apa pun. Jika ada handel terbuka ke perangkat, sistem file biasanya gagal dalam permintaan penghapusan kueri. Jika tidak, sistem file biasanya mengunci volume untuk mencegah permintaan pembuatan di masa mendatang berhasil. Jika sistem file yang dipasang tidak mendukung permintaan penghapusan kueri, Manajer PnP gagal dalam permintaan penghapusan kueri untuk perangkat.
IRP_MN_REMOVE_DEVICE Menunjukkan bahwa perangkat akan dihapus. Jika sistem file dipasang pada perangkat, Manajer PnP mengirimkan IRP ini ke sistem file dan ke filter sistem file apa pun. Sistem file harus segera meneruskan IRP ini ke driver penyimpanan untuk perangkat, mengatur rutinitas penyelesaian di mana sistem file kemudian melepas volume.
IRP_MN_START_DEVICE Menunjukkan bahwa perangkat sedang dimulai. Sistem file harus meneruskan IRP ini ke driver penyimpanan untuk perangkat.
IRP_MN_SURPRISE_REMOVAL Menunjukkan bahwa perangkat telah dihapus. Jika sistem file dipasang pada perangkat, Manajer PnP mengirimkan IRP ini ke sistem file dan ke filter sistem file apa pun. Sistem file harus segera meneruskan IRP ini ke driver penyimpanan untuk perangkat, mengatur rutinitas penyelesaian di mana sistem file kemudian melepas volume.

Operasi: Driver Filter Sistem File Warisan

Driver filter sistem file harus menangani RUNP PnP sesuai dengan panduan berikut:

  • Ketika pengguna akan menghapus volume dengan lancar, Manajer PnP mengirimkan permintaan IRP_MN_QUERY_REMOVE_DEVICE. Saat menerima IRP ini, filter harus menutup semua handel terbuka pada volume dan meneruskan IRP ke driver berikutnya yang lebih rendah pada tumpukan. Langkah ini penting. Jika driver gagal menutup semua handel terbuka, volume dicegah untuk dilepas, yang pada gilirannya mencegah perangkat fisik dikeluarkan.

    Saat menerima permintaan IRP_MN_QUERY_REMOVE_DEVICE, sistem file FAT segera melepas semua volume yang dapat dihapus dengan aman. Dengan demikian, filter apa pun yang terpasang pada volume FAT harus mengharapkan bahwa objek perangkat filternya akan dikosongkan sebelum rutinitas penyelesaian filter dipanggil. Sistem file NTFS tidak melakukan ini. Dengan demikian filter yang melekat pada volume NTFS dapat mengharapkan bahwa objek perangkatnya masih melekat pada volume ketika rutinitas penyelesaian filter dipanggil.

  • IRP yang diterima setelah permintaan IRP_MN_QUERY_REMOVE_DEVICE tetapi sebelum permintaan IRP_MN_CANCEL_REMOVE_DEVICE atau IRP_MN_REMOVE_DEVICE diterima, dapat dengan aman diteruskan ke tumpukan perangkat penyimpanan agar gagal, atau ditahan dalam antrean hingga permintaan batal-hapus atau hapus-perangkat diterima.

  • Jika filter menerima permintaan IRP_MN_CANCEL_REMOVE_DEVICE setelah menutup semua handel terbuka untuk volume sebagai respons terhadap permintaan IRP_MN_QUERY_REMOVE_DEVICE, filter dapat membuka kembali handel. Namun, filter hanya dapat melakukan ini buka kembali dalam rutinitas penyelesaiannya, setelah IRP berhasil diselesaikan oleh driver di bawahnya di tumpukan.

  • Saat filter menerima permintaan IRP_MN_REMOVE_DEVICE, biasanya tidak perlu melakukan pemrosesan apa pun pada IRP, kecuali telah menahan RUNP dalam antrean sejak menerima permintaan IRP_MN_QUERY_REMOVE_DEVICE. Jika menyimpan IRP dalam antrean, filter harus menghapus antrean semua IRP untuk volume dan gagal sebelum meneruskan IRP ke driver berikutnya yang lebih rendah pada tumpukan.

  • Saat menerima permintaan IRP_MN_SURPRISE_REMOVAL, filter harus melakukan operasi berikut:

    • Tutup semua handel yang terbuka ke volume, karena sistem file tidak dapat membersihkan tumpukan sampai tidak ada referensi yang luar biasa.

    • Jika filter menahan IRP dalam antrean, filter dapat gagal atau meneruskannya ke tumpukan agar tumpukan perangkat penyimpanan gagal.

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 Plug and Play:

  • DeviceObject adalah penunjuk ke objek perangkat target.

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

  • IrpSp->FileObject harus menunjuk ke NULL untuk RUNP PnP.

  • IrpSp->MajorFunction diatur ke IRP_MJ_PNP.

  • IrpSp->MinorFunction diatur ke salah satu nilai berikut:

    • IRP_MN_CANCEL_REMOVE_DEVICE
    • IRP_MN_QUERY_REMOVE_DEVICE
    • IRP_MN_REMOVE_DEVICE
    • IRP_MN_START_DEVICE
    • IRP_MN_SURPRISE_REMOVAL

Lihat juga

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_PNP (Referensi Kernel WDK)

IRP_MN_CANCEL_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_REMOVE_DEVICE

IRP_MN_START_DEVICE

IRP_MN_SURPRISE_REMOVAL