Membuat ISR Aktif atau Tidak Aktif
Dimulai dengan Windows 8, driver dapat memanggil rutinitas IoReportInterruptActive atau IoReportInterruptInactive untuk membuat rutinitas layanan interupsi terdaftar (ISR) aktif atau tidak aktif.
Untuk mendaftarkan ISR, dan untuk menyambungkan ISR ke interupsi atau serangkaian gangguan, driver memanggil rutinitas IoConnectInterruptEx . Setelah ISR terdaftar, driver dapat menggunakan IoReportInterruptActive dan IoReportInterruptInactive untuk melakukan operasi koneksi dan pemutusan koneksi ringan (atau "lunak") yang membuat pendaftaran ISR tidak berubah. IoReportInterruptInactive menonaktifkan panggilan ke ISR dengan memutuskan sambungan sementara interupsi atau gangguan terkait. IoReportInterruptActive soft-connects interupsi ini untuk mengaktifkan panggilan ke ISR.
Misalnya, driver mungkin memanggil IoReportInterruptInactive untuk memutuskan sementara serangkaian gangguan sebelum perangkat keluar dari status daya D0, dan memanggil IoReportInterruptActive untuk menyambungkan sementara gangguan ini setelah perangkat masuk kembali D0. Pada prinsipnya, driver mungkin sebaliknya memanggil IoDisconnectInterruptEx sebelum perangkat keluar dari D0, dan memanggil IoConnectInterruptEx setelah perangkat masuk kembali D0. Namun, panggilan IoReportInterruptXxx lebih cepat daripada panggilan IoConnectInterruptEx dan IoDisconnectInterruptEx . Berbeda dengan panggilan IoConnectInterruptEx dan IoDisconnectInterruptEx , yang mungkin gagal karena berbagai alasan (misalnya, sumber daya sistem yang tidak mencukupkan), panggilan IoReportInterruptXxx jarang, jika pernah, gagal. Selain itu, rutinitas IoReportInterruptXxx dapat dipanggil di IRQL <= DISPATCH_LEVEL, sedangkan IoConnectInterruptEx dan IoDisconnectInterruptEx hanya dapat dipanggil pada PASSIVE_LEVEL.
Secara default, ISR aktif (dan panggilan ke ISR diaktifkan) setelah IoConnectInterruptEx berhasil mendaftarkan ISR.
Panggilan ke IoReportInterruptInactive dan IoReportInterruptActive bersifat opsional. Jika driver tidak pernah memanggil rutinitas ini, ISR terdaftar tetap aktif sampai driver memanggil rutinitas IoDisconnectInterruptEx untuk membatalkan pendaftaran ISR.
Driver harus mengonfigurasi perangkat untuk mengeluarkan gangguan hanya ketika ISR untuk gangguan ini aktif. Kegagalan untuk mencegah perangkat mengeluarkan gangguan ketika ISR tidak aktif dapat menyebabkan ketidakstabilan sistem. Misalnya, jika perangkat berbagi garis interupsi yang dipicu tingkat dengan perangkat lain, dan perangkat mengeluarkan permintaan interupsi ketika ISR tidak aktif, ISR untuk perangkat lain di saluran tidak akan mengakui gangguan dan gangguan akan terus diaktifkan. Sebelum memanggil IoReportInterruptInactive, driver harus mengonfigurasi perangkat untuk berhenti mengeluarkan gangguan. Setelah memanggil IoReportInterruptActive, driver harus mengonfigurasi perangkat untuk mulai mengeluarkan gangguan.
Untuk membatalkan pendaftaran ISR, driver dapat memanggil IoDisconnectInterruptEx terlepas dari apakah ISR saat ini aktif atau tidak aktif.
Panggilan IoReportInterruptActive yang terjadi ketika ISR sudah aktif tidak berpengaruh, tetapi tidak diperlakukan sebagai kesalahan. Demikian pula, panggilan IoReportInterruptInactive yang terjadi ketika ISR sudah tidak aktif tidak berpengaruh, tetapi tidak diperlakukan sebagai kesalahan.