Bagikan melalui


Mengaktifkan dan Menonaktifkan Gangguan

Jika driver Anda menangani gangguan perangkat, driver harus menyediakan fungsi panggilan balik EvtInterruptEnable dan EvtInterruptDisable yang mengaktifkan dan menonaktifkan gangguan. Biasanya, fungsi panggilan balik ini berjalan di DIRQL perangkat dan harus melakukan apa pun yang diperlukan untuk mengaktifkan dan menonaktifkan mekanisme gangguan perangkat. Untuk gangguan tingkat pasif, fungsi panggilan balik ini berjalan di IRQL = PASSIVE_LEVEL sambil menahan kunci interupsi tingkat pasif.

Jika driver Anda harus melakukan operasi tambahan yang terkait dengan mengaktifkan atau menonaktifkan gangguan, dan jika operasi tambahan ini tidak dapat dilakukan di IRQL = DIRQL, driver juga dapat menyediakan fungsi panggilan balik EvtDeviceD0EntryPostInterruptsEnabled dan EvtDeviceD0ExitPreInterruptsDisabled . Kedua fungsi panggilan balik ini berjalan di IRQL = PASSIVE_LEVEL tanpa kunci interupsi yang ditahan, dan dapat memanggil metode objek kerangka kerja yang tidak tersedia di IRQL = DIRQL.

Kerangka kerja memanggil fungsi panggilan balik EvtInterruptEnable dan EvtDeviceD0EntryPostInterruptsEnabled setiap kali perangkat memasuki status kerja (D0), setelah kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Entry driver.

Kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0ExitPreInterruptsDisabled dan EvtInterruptDisable setiap kali perangkat meninggalkan status kerjanya, sebelum kerangka kerja memanggil fungsi panggilan balik EvtDeviceD0Exit driver. Untuk informasi selengkapnya tentang kapan kerangka kerja memanggil fungsi panggilan balik driver, lihat Skenario PnP dan Manajemen Daya.

Anda tidak boleh berasumsi bahwa perangkat akan menggunakan sumber daya interupsi yang sama setiap kali kerangka kerja memanggil fungsi panggilan balik EvtInterruptEnable driver Anda. Terkadang manajer PnP mendistribusikan ulang sumber daya sistem, dan mungkin menetapkan sumber daya interupsi baru ke perangkat Anda.

Driver dapat memanggil WdfInterruptGetInfo untuk menentukan sumber daya interupsi perangkat. Driver dapat memanggil WdfInterruptGetDevice untuk menentukan perangkat tempat objek interupsi berada. (Beberapa driver mungkin memanggil WdfInterruptWdmGetInterrupt.)

Untuk mengaktifkan dan menonaktifkan interupsi secara langsung, driver dapat memanggil metode WdfInterruptEnable dan WdfInterruptDisable objek interupsi, yang memanggil fungsi panggilan balik peristiwa EvtInterruptEnable dan EvtInterruptDisable driver. Namun, sebagian besar driver hanya boleh mengizinkan kerangka kerja untuk memanggil fungsi panggilan balik EvtInterruptEnable dan EvtInterruptDisable pada waktu yang tepat.