Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Rutinitas DispatchPnP driver mendukung Plug and Play dengan menangani IRP untuk kode fungsi I/O IRP_MJ_PNP. Terkait dengan kode fungsi IRP_MJ_PNP adalah beberapa kode fungsi I/O kecil (lihat IRP Kecil Plug and Play), beberapa di antaranya harus ditangani oleh semua driver, dan beberapa dapat ditangani secara opsional. Manajer PnP menggunakan kode fungsi kecil ini untuk mengarahkan driver untuk memulai, menghentikan, dan menghapus perangkat dan untuk mengkueri driver tentang perangkat mereka.
Semua driver untuk perangkat harus memiliki kesempatan untuk menangani IRP PnP untuk perangkat, kecuali dalam beberapa kasus di mana driver fungsi atau filter diizinkan untuk menghentikan IRP.
Setiap rutinitas DispatchPnP driver harus mengikuti aturan berikut:
Fungsi atau driver filter harus meneruskan IRP PnP ke driver berikutnya di dalam stack perangkat, kecuali jika fungsi atau driver filter tersebut menangani IRP dan mengalami kegagalan (karena sumber daya yang tidak mencukupi, misalnya).
Semua driver untuk perangkat harus memiliki kesempatan untuk menangani IRP PnP pada perangkat kecuali salah satu driver mengalami kesalahan. Manajer PnP mengirim IRP ke driver teratas dalam tumpukan perangkat. Driver fungsi dan filter meneruskan IRP ke driver berikutnya, dan driver bus induk menyelesaikan IRP. Lihat Meneruskan IRP PnP Ke Bawah Tumpukan Perangkat untuk informasi selengkapnya.
Driver dapat gagal IRP jika mencoba menangani IRP dan mengalami kesalahan (seperti sumber daya yang tidak mencukupi). Jika driver menerima IRP dengan kode yang tidak dapat ditangani, driver tidak boleh menolak IRP tersebut. Harus meneruskan IRP semacam itu ke driver berikutnya tanpa memodifikasi status IRP.
Driver harus menangani IRP PnP tertentu dan dapat secara opsional menangani IRP PnP lainnya.
Setiap driver PnP diperlukan untuk menangani IRP tertentu, seperti IRP_MN_REMOVE_DEVICE, dan dapat menangani orang lain secara opsional. Lihat IRP Minor Plug and Play untuk informasi tentang IRP mana yang diperlukan dan opsional untuk setiap jenis driver (driver fungsi, driver filter, dan driver bus).
Driver dapat gagal IRP PnP yang diperlukan dengan status kesalahan yang sesuai, tetapi driver tidak boleh mengembalikan STATUS_NOT_SUPPORTED untuk IRP tersebut.
Jika driver berhasil menangani IRP PnP, driver menetapkan status IRP menjadi sukses. Ini tidak bergantung pada driver lain di tumpukan untuk mengatur status.
Driver menetapkan Irp-IoStatus.Status> ke STATUS_SUCCESS untuk memberi tahu manajer PnP bahwa driver berhasil menangani IRP. Untuk beberapa IRP, pengemudi non-bus mungkin dapat mengandalkan pengemudi bus induknya untuk mengatur status ke sukses. Namun, ini adalah praktik berisiko. Untuk konsistensi dan kekuatan, driver harus menetapkan status IRP menjadi sukses untuk setiap IRP PnP yang berhasil ditanganinya.
Jika pengemudi gagal dalam IRP, pengemudi menyelesaikan IRP dengan status kesalahan dan tidak meneruskan IRP ke pengemudi berikutnya.
Untuk gagal IRP seperti IRP_MN_QUERY_STOP_DEVICE, driver mengatur Irp-IoStatus.Status> ke STATUS_UNSUCCESSFUL. Nilai status kesalahan tambahan untuk IRP lain termasuk STATUS_INSUFFICIENT_RESOURCES dan STATUS_INVALID_DEVICE_STATE.
Driver tidak mengatur STATUS_NOT_SUPPORTED untuk RUN yang mereka tangani. Ini adalah status awal yang ditetapkan oleh manajer PnP. Jika IRP selesai dengan status ini, itu berarti bahwa tidak ada driver di tumpukan yang menangani IRP; semua driver baru saja meneruskan IRP ke driver berikutnya.
Driver harus menangani PnP IRP dalam rutinitas pengirimannya (saat IRP diproses menuruni tumpukan perangkat), dalam rutinitas IoCompletion (saat IRP diproses naik kembali pada tumpukan perangkat), atau keduanya, seperti yang ditentukan di halaman referensi untuk IRP.
Beberapa IRP PnP, seperti IRP_MN_REMOVE_DEVICE, harus ditangani terlebih dahulu oleh driver di bagian atas tumpukan perangkat dan kemudian oleh setiap driver berikutnya yang lebih rendah. Lainnya, seperti IRP_MN_START_DEVICE, harus ditangani terlebih dahulu oleh sopir bus induk. Beberapa lainnya, seperti IRP_MN_QUERY_CAPABILITIES, dapat ditangani baik dalam perjalanan menurun melalui tumpukan perangkat maupun dalam perjalanan kembali ke atas. Lihat Plug and Play Minor IRPs untuk aturan yang berlaku untuk setiap IRP PnP. Lihat Menunda Pemrosesan IRP PnP Hingga Driver Yang Lebih Rendah Selesai untuk informasi tentang penanganan IRP PnP yang harus diproses terlebih dahulu oleh driver bus induk.
Driver harus menambahkan informasi ke IRP saat IRP bergerak turun pada tumpukan perangkat dan memodifikasi atau menghapus informasi saat IRP bergerak naik kembali.
Saat mengembalikan informasi sebagai respons terhadap IRP kueri PnP, driver harus mengikuti konvensi ini untuk memungkinkan pengiriman informasi secara tertib oleh driver berlapis untuk perangkat.
Kecuali jika didokumentasikan secara eksplisit, driver tidak boleh bergantung pada IRP PnP yang dikirimkan dalam urutan tertentu.
Ketika driver mengirim IRP PnP, driver harus mengirim IRP ke driver atas di tumpukan perangkat.
Sebagian besar IRP PnP dikirim oleh manajer PnP, tetapi beberapa dapat dikirim oleh driver (misalnya, IRP_MN_QUERY_INTERFACE). Pengemudi harus mengirimkan IRP PnP ke driver di bagian atas tumpukan perangkat. Panggil IoGetAttachedDeviceReference untuk mendapatkan pointer ke objek perangkat untuk driver di bagian atas tumpukan perangkat.