IRP_MN_SET_POWER

IRP ini memberi tahu driver perubahan pada status daya sistem atau mengatur status daya perangkat untuk perangkat.

Kode Utama

IRP_MJ_POWER

Ketika Dikirim

Baik manajer daya sistem atau pemilik kebijakan daya perangkat dapat mengirim IRP ini.

Manajer daya mengirimkan IRP ini untuk memberi tahu driver tentang perubahan pada status daya sistem. Jika driver telah mendaftarkan perangkatnya untuk deteksi diam, manajer daya mengirimkan IRP ini untuk mengubah status daya perangkat diam.

Driver yang memiliki kebijakan daya mengirimkan IRP ini untuk mengatur status daya perangkat untuk perangkatnya. Driver harus memanggil PoRequestPowerIrp untuk mengirim IRP ini.

Manajer daya mengirimkan IRP ini di IRQL = PASSIVE_LEVEL ke tumpukan perangkat yang mengatur bendera DO_POWER_PAGABLE di PDO. Driver dalam tumpukan tersebut dapat menyentuh kode halaman atau data untuk menyelesaikan permintaan.

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

Anggota Parameters.Power.Type menentukan jenis status daya yang ditetapkan, baik SystemPowerState atau DevicePowerState.

Anggota 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 .

Anggota Parameters.Power.ShutdownType menentukan informasi tambahan tentang transisi yang diminta. Nilai yang mungkin untuk anggota ini adalah nilai enumerasi POWER_ACTION . Untuk informasi selengkapnya, lihat Tindakan Daya Sistem.

Dimulai dengan Windows Vista, anggota Parameters.Power.SystemPowerStateContext adalah struktur SYSTEM_POWER_STATE_CONTEXT baca-saja yang sebagian buram yang berisi informasi tentang status daya sistem komputer sebelumnya. Jika Parameters.Power.Type adalah SystemPowerState dan Parameters.Power.State adalah PowerSystemWorking, dua bit bendera dalam struktur ini menunjukkan apakah startup cepat atau bangun dari hibernasi menyebabkan komputer memasuki status sistem S0 (bekerja). Untuk informasi selengkapnya, lihat Membedakan Startup Cepat dari Wake-from-Hibernation.

Tabel berikut ini memperlihatkan konten IRP_MN_SET_POWER. Parameters.Power. {State| ShutdownType} dan bidang bit CurrentSystemState, TargetSystemState, dan EffectiveSystemState dalam struktur SYSTEM_POWER_STATE_CONTEXT untuk setiap transisi daya sistem. Setiap baris mewakili satu IRP_MN_SET_POWER.

Transisi Provinsi Jenis Matikan SystemState Saat Ini Target SystemState SystemState yang Efektif Komentar
Tidurlah untuk... S3 tidur S0 S3 S3
... Bangun S0 tidur S3 S0 S0
Hybrid Sleep ke... S4 Hibernate S0 S3 S4 Tidur dengan file hibernasi (Fast S4)
... Bangun S0 tidur S3 S0 S0
... Bangun/PwrLost S0 tidur S4 S0 S0
Hibernasi ke... S4 Hibernate S0 S4 S4
... Bangun S0 tidur S4 S0 S0
Matikan Hibrid ke... S4 Hibernate S0 S5 S4 Aplikasi ditutup, pengguna keluar seolah-olah dimatikan (Hiber Boot)
... Startup Cepat S0 tidur S4 S0 S0
Matikan ke... S5 Matikan/Reset/Nonaktif S0 S5 S5
... Boot Sistem Tidak ada S-IRP untuk boot up

Parameter Output

Parameters.Power.SystemContext disediakan untuk penggunaan sistem.

Blok Status I/O

Driver mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS untuk menunjukkan bahwa perangkat telah memasuki status yang diminta.

Driver tidak boleh gagal dalam permintaan untuk mengatur status daya sistem.

Driver fungsi dan filter yang terletak di atas driver bus tidak boleh gagal dalam permintaan untuk mengatur status daya perangkat. Driver bus dapat mengalihkan permintaan daya perangkat jika perangkat dihapus atau dalam proses dihapus.

Operasi

Manajer daya atau driver dapat meminta IRP IRP_MN_SET_POWER . Manajer daya mengirimkan IRP ini karena salah satu alasan berikut:

  • Untuk memberi tahu driver tentang perubahan pada status daya sistem

  • Untuk mengubah status daya perangkat yang manajer dayanya melakukan deteksi diam

  • Untuk menegaskan kembali status sistem saat ini setelah driver gagal permintaan IRP_MN_QUERY_POWER untuk status daya sistem. Untuk informasi selengkapnya, lihat IRP_MN_QUERY_POWER.

Driver yang memiliki kebijakan daya perangkat mengirimkan IRP_MN_SET_POWER untuk mengubah status daya perangkatnya.

Pada waktu tertentu, sistem hanya memungkinkan satu IRP tersebut untuk aktif untuk setiap objek perangkat.

Setiap driver harus meneruskan setiap IRP daya ke driver berikutnya yang lebih rendah dengan memanggil IoCallDriver (dimulai dengan Windows Vista) atau PoCallDriver (Windows Server 2003, Windows XP, dan Windows 2000). Antarmuka PoCallDriver mirip dengan IoCallDriver, kecuali bahwa subsistem manajemen daya mungkin menunda IRP sebelum meneruskannya ke driver berikutnya. Misalnya, penundaan dapat terjadi pada permintaan PowerDeviceD0 jika perangkat memerlukan arus inrush dan oleh karena itu harus dinyalakan secara serial dengan perangkat lain tersebut.

Setelah driver menerima permintaan IRP_MN_SET_POWER pada Windows Server 2003, Windows XP, atau 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_SET_POWER untuk Status Daya Sistem

Hanya manajer daya sistem yang dapat mengirim IRP set-power sistem.

Driver tidak boleh gagal dalam permintaan untuk mengatur status daya sistem.

Jika memungkinkan, manajer daya mengirim IRP_MN_QUERY_POWER sebelum mengirim IRP_MN_SET_POWER untuk meminta status tidur sistem. Namun, dalam beberapa kondisi (seperti pengguna yang menekan tombol Matikan atau baterai kedaluwarsa), manajer daya mungkin mengeluarkan IRP_MN_SET_POWER tanpa mengkueri terlebih dahulu. Manajer daya hanya mengkueri untuk status tidur; tidak pernah mengkueri sebelum menyala.

Permintaan IRP_MN_SET_POWER dikirim ke driver teratas di tumpukan perangkat untuk perangkat. Pengemudi teratas melewati IRP ke pengemudi bawah berikutnya dan sebagainya sampai IRP mencapai pengemudi bus, yang harus menyelesaikan IRP.

Driver filter biasanya tidak perlu bertindak pada IRP set-power sistem, selain meneruskannya.

Namun, pemilik kebijakan daya perangkat menetapkan rutinitas IoCompletion sebelum meneruskan IRP. Dalam rutinitas IoCompletion , ia mengirimkan permintaan IRP_MN_SET_POWER untuk IRP daya perangkat. Untuk informasi selengkapnya, lihat Menangani IRP Set-Power Sistem di Pemilik Kebijakan Daya Perangkat.

IRP set-power sistem menginformasikan kepada driver bahwa perubahan pada status daya sistem akan segera terjadi dan driver harus mempersiapkannya. Namun, driver tidak boleh mengubah status daya perangkatnya sampai menerima IRP_MN_SET_POWER untuk status daya perangkat .

Nilai di Parameters.Power.ShutdownType menyediakan informasi tambahan tentang tindakan yang tertunda. Ketika IRP menentukan PowerSystemShutdown (S5), driver dapat menentukan 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, driver mungkin mematikan perangkat untuk menghentikan I/O saat sistem direset.

Pada Windows 2000 dan versi yang lebih baru dari sistem operasi, nilai di ShutdownType juga bisa powerActionShutdown. Dalam hal ini, driver tidak dapat memberi tahu jenis pematian apa yang diminta dan karenanya harus melanjutkan untuk reset.

Status Daya Perangkat

Driver fungsi dan filter yang terletak di atas driver bus tidak boleh gagal dalam permintaan untuk mengatur status daya perangkat. Driver bus dapat mengalihkan permintaan daya perangkat jika perangkat dihapus atau dalam proses dihapus.

Driver harus mengatur perangkat ke dalam status yang diminta sebelum menyelesaikan IRP.

Ketika IRP meminta transisi ke status daya yang lebih rendah, driver harus menangani IRP saat melakukan perjalanan ke tumpukan perangkat, menyimpan konteks apa pun yang diperlukan driver untuk memulihkan perangkat ke status kerja. Setelah sopir bus menerima IRP, pengemudi:

  • Menyimpan konteks apa pun yang diperlukan driver untuk memulihkan perangkat ke status kerja.

  • Mengatur perangkat ke status daya yang diminta.

  • Memanggil PoSetPowerState untuk memberi tahu manajer daya.

  • Memanggil PoStartNextPowerIrp untuk memulai IRP daya berikutnya (Hanya Windows Server 2003, Windows XP, dan Windows 2000).

  • Menyelesaikan IRP daya perangkat.

Driver harus menyelesaikan IRP ini tepat waktu. Secara umum, driver harus menghindari keterlambatan yang menurut pengguna biasa akan terlihat lambat. Misalnya, driver dapat menunda perubahan status sistem untuk menghapus disk cache atau data jaringan, tetapi tidak boleh menjaga koneksi jaringan tetap hidup atau memformat pita. Untuk informasi selengkapnya, lihat Meneruskan Runtime integrasi Daya.

Pada Windows 2000 dan versi yang lebih baru dari sistem operasi, jika IRP menentukan PowerDeviceD1, PowerDeviceD2, atau PowerDeviceD3, dan IRP set-power sistem aktif, nilai di Parameters.Power.ShutdownType menyediakan informasi tentang IRP sistem.

Driver perangkat pada jalur hibernasi harus memeriksa nilai ini. Jika IRP meminta PowerDeviceD3 dan ShutdownType adalah PowerActionHibernate, driver tersebut harus menyimpan konteks apa pun yang diperlukan untuk memulihkan perangkat, tetapi tidak boleh mematikan perangkat; perangkat akan memasuki status D3 ketika mesin kehilangan daya.

Pada Windows 2000 dan versi sistem operasi yang lebih baru, driver tidak boleh mengandalkan nilai di ShutdownType jika status daya yang diminta adalah PowerDeviceD0.

Pada Windows 98/Me, jika IRP meminta status daya perangkat, ShutdownType selalu PowerActionNone.

Driver yang menentukan kapan harus mematikan perangkat bervariasi tergantung pada kelas perangkat.

Driver yang menentukan kapan harus menyalakan perangkat hampir selalu menjadi driver yang mengakses perangkat mendaftar. Driver harus memverifikasi bahwa perangkat dalam status D0 sebelum mengakses daftar perangkat keras perangkat. Jika perangkat tidak dalam status D0, driver harus memanggil PoRequestPowerIrp untuk mengirim IRP untuk menyalakan perangkat. Pengandar tidak dapat mengakses perangkatnya kecuali perangkat dalam status D0 .

Ketika driver menerima IRP set-power untuk status perangkat D0, driver mengatur rutinitas IoCompletion dan meneruskan IRP ke driver yang lebih rendah berikutnya.

Ketika IRP mencapai driver bus, driver tersebut menerapkan (atau mengatur ulang) daya ke perangkat, memanggil PoStartNextPowerIrp (Windows Server 2003, Windows XP, dan Windows 2000 saja), dan memanggil PoSetPowerState untuk memberi tahu manajer daya status daya baru untuk perangkat.

Setelah driver bus menyelesaikan IRP power-up, driver fungsi dan filter menangani IRP dalam rutinitas IoCompletion mereka saat melakukan perjalanan mencadangkan tumpukan perangkat. Dalam rutinitas IoCompletion , setiap driver memulihkan atau menginisialisasi ulang konteks perangkatnya dan melakukan tugas start-up lain yang diperlukan.

Untuk informasi selengkapnya, lihat Menangani IRP_MN_SET_POWER untuk Status Daya Perangkat.

Persyaratan

Header

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

Lihat juga

DEVICE_POWER_STATE

IoCallDriver

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

PoCallDriver

PoStartNextPowerIrp

PoSetPowerState

PoRequestPowerIrp

SYSTEM_POWER_STATE

SYSTEM_POWER_STATE_CONTEXT