Bagikan melalui


IRP_MN_QUERY_CAPABILITIES

Manajer PnP mengirimkan IRP ini untuk mendapatkan kemampuan perangkat, seperti apakah perangkat dapat dikunci atau dikeluarkan.

Driver fungsi dan filter dapat menangani permintaan ini jika mengubah kemampuan yang didukung oleh pengemudi bus. Driver bus harus menangani permintaan ini untuk perangkat anak mereka.

Nilai

0x09

Kode Utama

IRP_MJ_PNP

Ketika Dikirim

Manajer PnP mengirimkan IRP ini ke driver bus untuk perangkat segera setelah perangkat dijumlahkan. Manajer PnP mengirim IRP ini lagi setelah semua driver untuk perangkat telah memulai perangkat. Driver dapat mengirim IRP ini untuk mendapatkan kemampuan untuk perangkat.

Manajer dan driver PnP mengirim IRP ini di IRQL PASSIVE_LEVEL dalam konteks utas arbitrer.

Parameter Input

Parameters.DeviceCapabilities.Capabilities anggota struktur IO_STACK_LOCATION menunjuk ke struktur DEVICE_CAPABILITIES yang berisi informasi tentang kemampuan perangkat.

Parameter Output

Parameters.DeviceCapabilities.Capabilities menunjuk ke struktur DEVICE_CAPABILITIES yang mencerminkan modifikasi apa pun yang dibuat oleh driver yang menangani IRP.

Blok Status I/O

Driver mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS atau ke status kesalahan yang sesuai seperti STATUS_UNSUCCESSFUL.

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

Pengemudi bus menetapkan Irp-IoStatus.Status> dan menyelesaikan IRP.

Operasi

Ketika perangkat dijumlahkan, tetapi sebelum fungsi dan driver filter dimuat untuk perangkat, manajer PnP mengirimkan permintaan IRP_MN_QUERY_CAPABILITIES ke driver bus induk untuk perangkat. Pengemudi bus harus menetapkan nilai yang relevan dalam struktur DEVICE_CAPABILITIES dan mengembalikannya ke manajer PnP.

Setelah tumpukan perangkat dibangun dan driver telah memulai perangkat, manajer PnP mengirim IRP ini lagi untuk ditangani terlebih dahulu oleh driver di bagian atas tumpukan perangkat dan kemudian oleh setiap driver yang lebih rendah di tumpukan. Driver fungsi dan filter dapat mengatur rutinitas IoCompletion dan menangani IRP ini dalam perjalanan mencadangkan tumpukan perangkat.

Driver harus menambahkan kemampuan sebelum mereka meneruskan IRP ke driver yang lebih rendah berikutnya.

Driver harus menghapus kemampuan setelah semua driver yang lebih rendah selesai dengan IRP. Driver biasanya tidak menghapus kemampuan yang telah diatur oleh driver lain, tetapi mungkin melakukannya jika memiliki informasi khusus tentang kemampuan perangkat dalam konfigurasi tertentu. Lihat Plug and Play untuk informasi tentang menunda pemrosesan IRP hingga driver yang lebih rendah selesai.

Setelah perangkat dijumlahkan dan drivernya dimuat, kemampuannya tidak boleh berubah. Kemampuan perangkat mungkin berubah jika perangkat dihapus dan dijumlahkan kembali.

Saat menangani IRP IRP_MN_QUERY_CAPABILITIES , driver yang merupakan manajer kebijakan daya untuk perangkat harus mengatur rutinitas IoCompletion dan menyalin kemampuan daya perangkat, seperti pemetaan status daya S-to-D, pada cara IRP mencadangkan tumpukan perangkat. Untuk menentukan kemampuan daya perangkat anak, driver bus induk membuat IRP kemampuan kueri lain dan mengirim IRP ke driver induknya. Lihat Melaporkan Kemampuan Daya Perangkat untuk informasi selengkapnya.

Jika driver menangani IRP ini, driver harus memeriksa nilai Versi DEVICE_CAPABILITIES. Jika nilai tersebut bukan versi yang didukung driver, driver harus gagal IRP. Jika versi didukung, driver harus memeriksa bidang Ukuran . Driver hanya boleh mengatur bidang yang berada dalam batas struktur kemampuan yang diterimanya sebagai input.

Driver yang menangani IRP ini dapat mengatur beberapa bidang DEVICE_CAPABILITIES tetapi tidak boleh mengatur bidang Ukuran dan Versi . Bidang-bidang ini hanya diatur oleh komponen yang mengirim IRP.

Lihat Plug and Play untuk aturan umum untuk menangani IRP kecil Plug and Play.

Mengirim IRP ini

Driver bus mengirimkan IRP ini ke tumpukan perangkat induk ketika menangani permintaan IRP_MN_QUERY_CAPABILITIES untuk salah satu perangkat turunannya. Selain itu, driver mungkin mengirim IRP ini untuk mendapatkan kemampuan perangkat untuk salah satu perangkatnya. Satu driver di tumpukan hanya memiliki bagian dari informasi kemampuan untuk perangkat; mengirim IRP ke tumpukan perangkat memungkinkannya untuk mengumpulkan gambar lengkap, termasuk modifikasi oleh driver filter apa pun, dan sebagainya.

Lihat Menangani RUN untuk informasi tentang pengiriman RUN. Langkah-langkah berikut berlaku khusus untuk IRP ini:

  • Alokasikan struktur DEVICE_CAPABILITIES dari kumpulan halaman, dan inisialisasi ke nol dengan memanggil RtlZeroMemory. Inisialisasi Ukuran ke sizeof(DEVICE_CAPABILITIES), Versi ke 1, dan Alamat dan UINumber ke -1.

  • Atur nilai di lokasi tumpukan I/O berikutnya dari IRP: atur MajorFunction ke IRP_MJ_PNP, atur MinorFunction ke IRP_MN_QUERY_CAPABILITIES, dan atur Parameters.DeviceCapabilities ke penunjuk ke struktur DEVICE_CAPABILITIES yang dialokasikan.

  • Inisialisasi IoStatus.Status ke STATUS_NOT_SUPPORTED.

  • Batalkan alokasi IRP dan struktur DEVICE_CAPABILITIES ketika tidak lagi diperlukan.

Persyaratan

Header

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

Lihat juga

DEVICE_CAPABILITIES