Menggunakan Antrean I/O Power-Managed

Saat driver membuat antrean I/O, driver dapat menentukan apakah antrean dikelola daya. Ketika permintaan I/O tersedia dalam antrean yang dikelola daya, kerangka kerja mengirimkan permintaan ke driver hanya jika perangkat dalam status berfungsi (D0). Kerangka kerja tidak mengizinkan perangkat untuk meninggalkan status kerjanya sampai semua permintaan I/O yang telah dikirimkan kerangka kerja dari antrean yang dikelola daya ke driver telah selesai, dibatalkan, atau ditunda.

Untuk informasi selengkapnya tentang antrean I/O yang dikelola daya, lihat Manajemen Daya untuk Antrean I/O.

Fungsi panggilan balik untuk Antrean Power-Managed

Jika driver Anda menggunakan antrean I/O yang dikelola daya, driver dapat menyediakan dua fungsi panggilan balik tambahan:

EvtIoStop
Fungsi panggilan balik EvtIoStop berhenti memproses permintaan I/O tertentu. Ketika perangkat meninggalkan status kerja (D0) atau dihapus, kerangka kerja memanggil fungsi panggilan balik EvtIoStop antrean I/O sekali untuk setiap permintaan I/O yang belum diselesaikan driver, termasuk permintaan yang dimiliki driver dan yang telah diteruskan ke target I/O.

EvtIoResume
Fungsi panggilan balik EvtIoResume melanjutkan pemrosesan permintaan I/O yang dihentikan sebelumnya. Kerangka kerja memanggil fungsi panggilan balik EvtIoResume antrean I/O saat melanjutkan pengiriman permintaan I/O ke driver dari antrean, setelah perangkat kembali ke status kerjanya.

Setiap kali kerangka kerja memanggil fungsi panggilan balik EvtIoStop driver, fungsi biasanya menyelesaikan atau membatalkan permintaan I/O, atau memanggil WdfRequestStopAcknowledge untuk mengembalikan kepemilikan permintaan ke kerangka kerja.

Saat melakukannya bersifat opsional, Anda harus secara umum menyediakan fungsi panggilan balik EvtIoStop untuk antrean yang dikelola daya. Dengan menyediakan EvtIoStop, driver Anda dapat membantu mempersingkat waktu yang berlalu sebelum perangkat Anda, dan mungkin sistem, memasuki status daya rendah.

Jika Anda tidak menyediakan EvtIoStop untuk antrean yang dikelola daya, kerangka kerja menunggu hingga semua permintaan yang dikirimkan dari antrean yang dikelola daya ke driver selesai sebelum memindahkan perangkat (atau sistem) ke status daya yang lebih rendah atau menghapus perangkat. Berpotensi, tindakan ini dapat mencegah sistem memasuki status hibernasi atau status daya sistem rendah lainnya. Dalam kasus ekstrem, itu dapat menyebabkan sistem crash dengan kode bugcheck 9F.

Jika driver Anda tidak meneruskan permintaan ke target I/O dan tidak menahan permintaan untuk waktu yang tidak ditentukan, Anda dapat dengan aman menghilangkan EvtIoStop untuk antrean yang dikelola daya.

Menunggu Objek Dispatcher

Secara umum, driver hanya boleh menggunakan objek dispatcher sebagai mekanisme sinkronisasi dalam konteks utas nonarbitrer.

Karena handler permintaan berjalan dalam konteks utas arbitrer, penangan permintaan untuk antrean yang dikelola daya tidak boleh menunggu objek dispatcher kernel diatur. Melakukannya dapat mengakibatkan kebuntuan.

Untuk informasi selengkapnya tentang kapan driver dapat menunggu objek dispatcher, dan apa yang harus dilakukan ketika tidak dapat, lihat Pengantar Objek Dispatcher Kernel.