IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Manajer PnP mengirimkan IRP ini ke tumpukan perangkat sehingga driver fungsi dapat menyesuaikan sumber daya yang diperlukan oleh perangkat, jika sesuai.

Driver fungsi biasanya menangani IRP ini.

Sopir bus induk (dan driver filter bus) tidak boleh menangani permintaan ini untuk PDO anak; sebaliknya, driver seperti itu harus melaporkan persyaratan sumber daya sebagai respons terhadap permintaan IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Driver filter atas dan bawah tidak menangani IRP ini.

Nilai

0x0D

Kode Utama

IRP_MJ_PNP

Ketika Dikirim

Manajer PnP mengirimkan IRP ini ketika sedang bersiap untuk mengalokasikan sumber daya ke perangkat.

Manajer PnP mengirimkan IRP ini di IRQL PASSIVE_LEVEL dalam konteks utas arbitrer.

Parameter Input

Irp-> IoStatus.Information menunjuk ke IO_RESOURCE_REQUIREMENTS_LIST yang berisi persyaratan sumber daya perangkat keras untuk perangkat. Pointer adalah NULL jika perangkat tidak menggunakan sumber daya perangkat keras.

Parameters.FilterResourceRequirements.IoResourceRequirementList juga menunjuk ke IO_RESOURCE_REQUIREMENTS_LIST, tetapi driver fungsi harus menggunakan daftar di blok IoStatus .

Parameter Output

Dikembalikan di blok status I/O.

Blok Status I/O

Jika driver fungsi menangani IRP ini, ia menanganinya di jalan IRP mencadangkan tumpukan. Jika driver fungsi berhasil menangani IRP, driver fungsi mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS dan mengatur Irp-IoStatus.Information> ke penunjuk ke IO_RESOURCE_REQUIREMENTS_LIST yang berisi persyaratan sumber daya yang difilter. Lihat bagian "Operasi" di bawah ini untuk informasi selengkapnya tentang mengatur daftar sumber daya yang difilter. Jika driver fungsi mengalami kesalahan saat menangani IRP ini, itu mengatur kesalahan di Irp-IoStatus.Status>. Jika driver fungsi tidak menangani IRP ini, ia menggunakan IoSkipCurrentIrpStackLocation untuk melewati IRP ke bawah tumpukan yang tidak berubah.

Driver filter atas dan bawah tidak menangani IRP ini. Driver seperti itu memanggil IoSkipCurrentIrpStackLocation, meneruskan IRP ke driver berikutnya, tidak boleh memodifikasi Irp-IoStatus>, dan tidak boleh menyelesaikan IRP.

Driver bus induk tidak menangani IRP ini. Ini meninggalkan Irp-IoStatus> apa adanya dan menyelesaikan IRP.

Operasi

Manajer PnP mengirimkan permintaan IRP_MN_QUERY_RESOURCE_REQUIREMENTS ke driver bus induk untuk perangkat, sebelum driver fungsi melampirkan objek perangkatnya ke tumpukan perangkat. Untuk memberi driver fungsi kesempatan untuk memodifikasi persyaratan sumber daya perangkat, jika sesuai, manajer PnP kemudian mengirim permintaan IRP_MN_FILTER_RESOURCE_REQUIREMENTS ke tumpukan perangkat lengkap. Manajer PnP mengirimkan IRP ini sebelum mengalokasikan sumber daya perangkat keras ke perangkat selama konfigurasi perangkat awal. Manajer PnP mungkin juga mengirim IRP ini selama penyeimbangan ulang sumber daya.

Ketika manajer PnP mengirim IRP ini, manajer PnP menyediakan tumpukan driver dengan daftar persyaratan sumber daya, yang dapat dimodifikasi dan dikembalikan driver. Manajer PnP menyediakan salah satu jenis daftar persyaratan sumber daya berikut (tercantum dalam urutan prioritas):

  • Konfigurasi paksa (dimodifikasi dari daftar sumber daya ke daftar persyaratan sumber daya)

  • Mengambil alih konfigurasi

  • Konfigurasi dasar

  • Konfigurasi boot (dimodifikasi dari daftar sumber daya ke daftar persyaratan sumber daya)

Jika driver fungsi menangani IRP ini, driver harus mengatur rutinitas penyelesaian dan menangani IRP dalam perjalanan mencadangkan tumpukan perangkat. Lihat Plug and Play untuk informasi tentang menangani IRP PnP dalam perjalanan mencadangkan tumpukan perangkat.

Jika driver fungsi tidak mengubah ukuran daftar saat ini yang ditujukan oleh Irp-IoStatus.Information>, driver dapat mengubah daftar di tempat. Jika driver perlu mengubah ukuran daftar persyaratan, driver harus mengalokasikan daftar IO_RESOURCE_REQUIREMENTS_LIST baru dari memori halaman dan membebaskan daftar sebelumnya. Manajer PnP membebaskan struktur yang dikembalikan ketika tidak lagi diperlukan.

Driver fungsi harus mempertahankan urutan sumber daya dalam daftar yang ditujukan oleh Irp-IoStatus.Information> dan tidak boleh mengubah tag sumber daya yang tidak ditanganinya. Pengemudi harus berhati-hati untuk menyesuaikan daftar persyaratan dengan cara yang didukung bus induk perangkat. Jika driver fungsi menambahkan sumber daya baru ke daftar persyaratan, dan sumber daya tersebut ditetapkan ke perangkat, driver fungsi harus memfilter sumber daya tersebut dari IRP_MN_START_DEVICE sebelum meneruskan IRP mulai ke driver bus.

Jika driver fungsi untuk perangkat tidak menangani IRP ini, manajer PnP menggunakan persyaratan sumber daya seperti yang ditentukan oleh driver bus induk sebagai respons terhadap permintaan IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Driver fungsi harus siap untuk menangani IRP ini untuk perangkat kapan saja setelah rutinitas AddDevice driver dipanggil untuk perangkat.

Lihat Plug and Play aturan umum untuk menangani Plug and Play runtime integrasi kecil.

Mengirim IRP ini

Dicadangkan untuk penggunaan sistem. Driver tidak boleh mengirim IRP ini.

Persyaratan

Header

Wdm.h (termasuk Wdm.h, Ntddk.h, atau Ntifs.h)

Lihat juga

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE