Rutinitas IoCompletion untuk Runtime Integrasi Daya Perangkat

Setelah pengemudi bus menyelesaikan IRP, manajer I/O memanggil rutinitas IoCompletion yang didaftarkan oleh driver tingkat yang lebih tinggi saat mereka melewati IRP ke tumpukan.

Setiap kali perangkat memasuki status D0, setiap drivernya harus mengatur rutinitas IoCompletion yang melakukan sebagian besar tugas yang diperlukan untuk mengembalikannya ke status kerja. Driver harus mengatur rutinitas IoCompletion untuk setiap transisi ke status D0, baik perangkat kembali dari keadaan tidur atau memasuki D0 pada saat start-up sistem. Gambar berikut menunjukkan tugas seperti rutinitas IoCompletion yang harus dilakukan.

diagram yang mengilustrasikan rutinitas iocompletion daya perangkat.

Tugas-tugas ini meliputi:

  • Memulihkan status daya perangkat atau menginisialisasi ulang perangkat, sesuai kebutuhan, dan bersiap untuk menangani I/O yang diantrekan oleh driver saat perangkat tidak dalam status kerja

  • Memanggil PoSetPowerState untuk memberi tahu manajer daya bahwa perangkat berada dalam status daya D0.

  • Memanggil PoStartNextPowerIrp untuk menerima IRP daya berikutnya, jika driver awalnya tidak mengirim IRP daya saat ini. (Hanya Windows Server 2003, Windows XP, dan Windows 2000).

  • Membebaskan memori yang dialokasikan untuk konteks perangkat.

  • Memanggil IoReleaseRemoveLock untuk membebaskan kunci yang diperoleh driver dalam rutinitas DispatchPower ketika menerima IRP.

  • Mengembalikan STATUS_SUCCESS.

Driver bus tidak menyalakan perangkat sampai atau driver yang lebih tinggi harus berkomunikasi dengan perangkat.

Ketika perangkatnya memasuki status tidur, driver harus mengatur rutinitas IoCompletion yang memanggil PoStartNextPowerIrp (Windows Server 2003, Windows XP, dan Windows 2000 saja) dan melepaskan kunci hapus. Ingatlah bahwa driver tidak dapat mengakses perangkatnya saat perangkat dalam keadaan tidur.