Bagikan melalui


Memanggil IoCallDriver versus Memanggil PoCallDriver

Dimulai dengan Windows Vista, driver harus memanggil IoCallDriver alih-alih PoCallDriver, untuk meneruskan runtime integrasi daya ke driver berikutnya yang lebih rendah. Di Windows Server 2003, Windows XP, dan Windows 2000, driver harus memanggil PoCallDriver, bukan IoCallDriver, untuk meneruskan runtime integrasi daya ke driver berikutnya yang lebih rendah. Namun, perhatikan bahwa driver yang menggunakan kode yang sama untuk menjalankan baik di Windows Vista maupun di versi Windows sebelumnya, harus memanggil PoCallDriver, bukan IoCallDriver.

Dimulai dengan Windows Vista, PoRequestPowerIrp dan IoCallDriver memastikan bahwa manajer daya menyinkronkan RUNP daya dengan benar di seluruh sistem. Di Windows Server 2003, Windows XP, dan Windows 2000, PoRequestPowerIrp, PoCallDriver, dan PoStartNextPowerIrp, pastikan bahwa manajer daya menyinkronkan runtime integrasi daya dengan benar di seluruh sistem.

Sistem membatasi jumlah RUNP daya aktif sebagai berikut:

  • Tidak lebih dari satu IRP daya sistem (IRP_MN_SET_POWER, IRP_MN_QUERY_POWER) dapat aktif untuk setiap objek perangkat fisik (PDO) pada waktu tertentu.

  • Tidak lebih dari satu IRP set-power perangkat (IRP_MN_SET_POWER) dapat aktif untuk setiap PDO pada waktu tertentu.

  • Tidak lebih dari satu IRP daya perangkat yang membutuhkan inrush daya dapat aktif di mana saja dalam sistem pada waktu tertentu.

Untuk memastikan bahwa dua perangkat inrush tidak mencoba untuk menyala secara bersamaan, manajer daya melacak RUNP daya inrush aktif di seluruh sistem dan hanya memungkinkan satu untuk aktif pada satu waktu. IRP inrush tambahan tidak dapat dimulai sampai IRP inrush aktif selesai.

Karena pembatasan ini pada IRP inrush, IRP daya perangkat mungkin memblokir sementara IRP inrush untuk perangkat lain selesai. Penulis driver harus menyadari perilaku ini saat melakukan debugging.