IRP_MN_QUERY_POWER
IRP ini meminta perangkat untuk menentukan apakah status daya sistem atau status daya perangkat dapat diubah.
Kode Utama
Ketika Dikirim
Manajer daya atau pemilik kebijakan daya perangkat mengirimkan IRP ini untuk menentukan apakah dapat mengubah sistem atau status daya perangkat, biasanya untuk tidur. Driver harus memanggil PoRequestPowerIrp untuk mengalokasikan dan mengirim IRP ini.
Manajer daya mengirimkan IRP ini di IRQL = PASSIVE_LEVEL ke tumpukan perangkat yang mengatur bendera DO_POWER_PAGABLE di PDO.
Manajer daya dapat mengirim IRP di IRQL = DISPATCH_LEVEL jika bendera DO_POWER_INRUSH diatur. Driver tersebut tidak dapat secara langsung atau tidak langsung mengakses kode halaman atau data apa pun.
Parameter Input
Parameters.Power.Type menentukan jenis status daya yang diatur, baik SystemPowerState atau DevicePowerState.
Parameters.Power.State menentukan status daya itu sendiri, sebagai berikut:
Jika Parameters.Power.Type adalah SystemPowerState, nilainya adalah enumerator dari jenis SYSTEM_POWER_STATE .
Jika Parameters.Power.Type adalah DevicePowerState, nilainya adalah enumerator dari jenis DEVICE_POWER_STATE .
Parameters.Power.ShutdownType menentukan informasi tambahan tentang transisi yang diminta. Nilai yang mungkin adalah enumerator dari jenis POWER_ACTION .
Parameter Output
Tidak ada.
Blok Status I/O
Driver mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS untuk menunjukkan bahwa perangkat dapat memasuki status yang diminta. Driver menetapkan status kegagalan yang sesuai untuk menunjukkan bahwa driver tidak dapat memasuki status yang diminta.
Operasi
Parameter untuk IRP_MN_QUERY_POWER identik dengan parameter untuk IRP_MN_SET_POWER. Alih-alih memberi tahu driver tentang perubahan yang tidak dapat dicabut ke status daya, namun, IRP_MN_QUERY_POWER kueri apakah sistem atau perangkat dapat memasuki status daya tertentu.
Driver tidak boleh mengubah status daya perangkatnya sebagai respons terhadap permintaan IRP_MN_QUERY_POWER .
Setelah driver menerima permintaan IRP_MN_QUERY_POWER pada Windows Server 2003, Windows XP, dan Windows 2000, driver harus memanggil PoStartNextPowerIrp, seperti yang dijelaskan dalam Memanggil PoStartNextPowerIrp. Dimulai dengan Windows Vista, memanggil PoStartNextPowerIrp tidak diperlukan dan panggilan seperti itu tidak melakukan operasi manajemen daya.
IRP_MN_QUERY_POWER untuk Status Daya Sistem
Manajer daya mengirimkan IRP ini untuk memastikan bahwa ia dapat mengubah status daya sistem tanpa mengganggu pekerjaan, seperti menghilangkan koneksi jaringan.
Jika memungkinkan, manajer daya meminta sebelum mengirim IRP_MN_SET_POWER untuk meminta status tidur sistem atau pematian sistem normal. Namun, dalam beberapa kondisi kritis (seperti pengguna yang menekan tombol Matikan atau baterai kedaluwarsa), manajer daya mungkin mengirim permintaan IRP_MN_SET_POWER tanpa terlebih dahulu mengirim permintaan daya kueri. Manajer daya hanya mengkueri untuk status tidur; kueri tidak pernah muncul sebelum kembali ke status kerja.
Ketika driver menerima IRP kueri daya sistem, driver harus gagal IRP jika tidak dapat mendukung salah satu status perangkat yang valid untuk status sistem yang dikueri. Untuk informasi selengkapnya, lihat DeviceState. Jika tidak, driver harus meneruskan IRP ke driver bawah berikutnya. Sopir bus menyelesaikan IRP.
Dimulai dengan Windows Vista, transisi ke status tidur sistem dianggap sebagai operasi penting. Meskipun driver mungkin gagal dalam IRP daya kueri sistem, manajer daya mungkin masih mengubah status daya sistem ke status tidur. Setelah driver menerima IRP daya kueri sistem, driver harus selalu disiapkan untuk perubahan berikutnya dalam status daya sistem.
Ketika pemilik kebijakan daya perangkat menerima IRP kueri daya sistem, pemilik kebijakan tersebut harus mengatur rutinitas IoCompletion di IRP sebelum meneruskannya. Dalam rutinitas IoCompletion , ia harus mengirim IRP_MN_QUERY_POWER untuk status perangkat yang valid untuk status sistem yang dikueri. Untuk informasi selengkapnya, lihat Menangani IRP Query-Power Sistem di Pemilik Kebijakan Daya Perangkat.
Ketika IRP menentukan PowerSystemShutdown (S5), nilai di Parameters.Power.ShutdownType memberikan alasan untuk mematikan. ShutdownType memberi tahu driver apakah sistem mengatur ulang (PowerActionShutdownReset) atau mematikan tanpa batas waktu untuk reboot nanti (PowerActionShutdownOff). Untuk driver sebagian besar perangkat, perbedaannya tidak konsekuensial. Namun, untuk perangkat tertentu, seperti perangkat streaming video yang melakukan DMA, driver mungkin memilih untuk mematikan perangkatnya saat sistem direset, sehingga menghentikan I/O yang sedang berlangsung.
Pada sistem Microsoft Windows 2000 dan yang lebih baru, nilai di ShutdownType juga dapat berupa PowerActionShutdown. Dalam hal ini, driver tidak dapat memberi tahu jenis pematian apa yang diminta dan karenanya harus melanjutkan untuk reset.
Jika driver gagal IRP_MN_QUERY_POWER meminta status daya sistem, manajer daya biasanya merespons dengan mengeluarkan IRP IRP_MN_SET_POWER . Biasanya, IRP ini akan menegaskan kembali status sistem saat ini. Namun, ada kemungkinan bahwa driver mungkin menerima IRP_MN_SET_POWER ke status dikueri atau ke beberapa status perantara lainnya. Pengemudi harus siap untuk menangani situasi ini.
IRP_MN_QUERY_POWER untuk Status Daya Perangkat
Pemilik kebijakan daya perangkat mengirimkan IRP ini ke tumpukannya sebagai respons terhadap permintaan IRP_MN_QUERY_POWER sistem.
Jika driver dapat meletakkan perangkatnya dalam status perangkat yang diminta, driver mengatur IoStatus.Status ke STATUS_SUCCESS dan meneruskan IRP ke driver bawah berikutnya, dan sebagainya sampai IRP mencapai driver bus. Jika ada driver dalam tumpukan yang harus gagal IRP, driver tersebut harus segera menyelesaikan IRP dengan memanggil IoCompleteRequest dan mengembalikan status kegagalan. Driver yang gagal IRP tidak meneruskannya lebih jauh ke bawah tumpukan.
Dengan mengembalikan STATUS_SUCCESS, driver menjamin bahwa driver tidak akan memulai operasi apa pun yang akan mengubah kemampuannya untuk mengatur status daya yang diminta. Driver harus mengantrekan IRP apa pun yang memerlukan operasi tersebut sampai menyelesaikan IRP set-power yang mengembalikan perangkat ke status daya yang dapat diterima.
Pada sistem Windows 2000 dan yang lebih baru, ketika IRP menentukan PowerDeviceD1, PowerDeviceD2, atau PowerDeviceD3, nilai di Parameters.Power.ShutdownType menyediakan informasi tentang IRP daya sistem saat ini, jika IRP daya sistem aktif. Dalam hal ini, nilai di ShutdownType menunjukkan status daya sistem yang saat ini diminta, atau PowerActionNone jika permintaan sistem tidak luar biasa. Pada Windows 98/Me, bidang ini selalu berisi PowerActionNone ketika IRP meminta status daya perangkat.
Persyaratan
Header |
Wdm.h (termasuk Wdm.h, Ntddk.h, atau Ntifs.h) |