Membuat Objek Interupsi
Driver Windows Driver Frameworks (WDF) yang menangani gangguan perangkat keras perangkat harus membuat objek gangguan kerangka kerja untuk setiap gangguan yang dapat didukung setiap perangkat. Dalam kerangka kerja versi 1.11 dan yang lebih baru yang berjalan pada versi Windows 8 atau yang lebih baru dari sistem operasi, driver Kernel-Mode Driver Framework (KMDF) dan User-Mode Driver Framework (UMDF) dapat membuat objek interupsi yang membutuhkan penanganan tingkat pasif. Kecuali Anda menulis driver untuk platform System on a Chip (SoC), namun, driver Anda harus menggunakan objek interupsi DIRQL.
Driver biasanya membuat objek gangguan kerangka kerja dalam fungsi panggilan balik EvtDriverDeviceAdd . Driver juga dapat membuat objek interupsi dari fungsi panggilan balik EvtDevicePrepareHardware - nya.
Kerangka kerja memanggil fungsi panggilan balik EvtDriverDeviceAdd driver sebelum manajer Plug and Play (PnP) menetapkan sumber daya sistem, seperti vektor interupsi, ke perangkat. Setelah manajer PnP menetapkan sumber daya, kerangka kerja menyimpan sumber daya interupsi di objek interupsi perangkat. (Driver yang tidak mendukung Plug and Play tidak dapat menggunakan objek interupsi.)
Untuk membuat objek interupsi kerangka kerja, driver Anda harus menginisialisasi struktur WDF_INTERRUPT_CONFIG dan meneruskannya ke metode WdfInterruptCreate .
UMDF mendukung jenis gangguan berikut:
- Dipicu tingkat (bersama atau eksklusif)
- Dipicu Edge (hanya eksklusif)
- MSI (eksklusif menurut definisi)
Catatan UMDF tidak mendukung gangguan yang dipicu tepi bersama .
Mulai dari UMDF versi 2.15, UMDF mendukung gangguan untuk perangkat sederhana seperti tombol dorong perangkat keras, biasanya didukung oleh pin GPIO, yang tidak dapat Anda aktifkan atau nonaktifkan secara eksplisit menggunakan register perangkat keras. Untuk mendukung perangkat tersebut, driver UMDF harus menggunakan gangguan eksklusif yang dipicu tepi.
Mulai dari KMDF versi 1.15, KMDF juga mendukung gangguan untuk perangkat tersebut, tanpa solusi yang dijelaskan dalam Penanganan Active-Both Gangguan.
Juga dalam WDF_INTERRUPT_CONFIG, driver Anda memasok pointer ke fungsi panggilan balik peristiwa yang disediakan driver berikut:
EvtInterruptEnable
Mengaktifkan gangguan perangkat keras.
EvtInterruptDisable
Menonaktifkan gangguan perangkat keras.
EvtInterruptIsr
Mengganggu rutinitas layanan (ISR) untuk gangguan.
EvtInterruptDpc
Panggilan prosedur yang ditangguhkan (DPC) untuk interupsi.
EvtInterruptWorkItem
Item kerja untuk gangguan tingkat pasif.
Untuk driver yang menggunakan kerangka kerja versi 1.11 atau yang lebih baru pada versi Windows 8 atau yang lebih baru dari sistem operasi, driver dapat secara eksplisit mengatur induk objek gangguan kerangka kerja (DIRQL atau pasif) ke objek perangkat kerangka kerja atau objek antrean kerangka kerja. Jika driver menentukan induk, driver harus mengatur anggota AutomaticSerialization dari struktur WDF_INTERRUPT_CONFIG objek interupsi ke TRUE. (Ingat bahwa jika AutomaticSerialization TRUE, kerangka kerja menyinkronkan eksekusi fungsi panggilan balik objek interupsi EvtInterruptDpc atau EvtInterruptWorkItem dengan fungsi panggilan balik dari objek lain yang berada di bawah objek induk interupsi.)
Sebagai contoh, driver mungkin menentukan antrean sebagai induk interupsi untuk menyinkronkan panggilan balik antrean dengan panggilan balik EvtInterruptDpc atau EvtInterruptWorkItem interupsi. Dalam konfigurasi ini, kerangka kerja menghapus objek antrean saat menghapus objek perangkat.
Setelah memanggil WdfInterruptCreate, driver dapat secara opsional memanggil WdfInterruptSetPolicy atau WdfInterruptSetExtendedPolicy untuk menentukan parameter interupsi tambahan. Biasanya driver memanggil metode ini dari fungsi panggilan balik EvtDriverDeviceAdd-nya .
Kerangka kerja secara otomatis menghapus interupsi sebelum menghapus induk interupsi. Secara opsional, driver dapat memanggil WdfObjectDelete untuk menghapus interupsi pada waktu sebelumnya.
Mendukung Interupsi bersinyali pesan
Interupsi bersinyali pesan (MSI) didukung dimulai dengan Windows Vista. Untuk mengaktifkan sistem operasi guna mendukung MSI untuk perangkat Anda, file INF driver Anda harus mengatur beberapa nilai dalam registri. Untuk informasi tentang cara mengatur nilai-nilai ini, lihat Mengaktifkan interupsi Message-Signaled di Registri.
Driver Anda harus membuat objek interupsi kerangka kerja untuk setiap vektor interupsi atau pesan MSI yang dapat didukung perangkat. Jika manajer PnP tidak memberikan perangkat semua sumber daya interupsi yang dapat didukung perangkat, objek interupsi tambahan tidak akan digunakan dan fungsi panggilan baliknya tidak akan dipanggil.
Di Windows 7, sistem operasi tidak mendukung permintaan sumber daya untuk lebih dari 910 pesan interupsi per fungsi perangkat. Dalam Windows 8, sistem operasi tidak mendukung permintaan sumber daya untuk lebih dari 2048 gangguan per fungsi perangkat.
Jika driver perangkat melebihi batas ini, perangkat mungkin gagal dimulai. Untuk beroperasi di komputer yang berisi banyak prosesor logis, driver tidak boleh meminta lebih dari satu interupsi per prosesor.
Driver harus mentolerir, tanpa kegagalan, penyeimbangan ulang sistem sumber daya interupsi di mana manajer PnP menetapkan ke perangkat sekumpulan sumber daya interupsi alternatif dari daftar persyaratan sumber daya. Misalnya, perangkat mungkin diberi jumlah interupsi pesan yang lebih kecil daripada yang diminta driver. Dalam kasus terburuk, driver harus siap untuk mengoperasikan perangkat hanya dengan satu gangguan berbasis garis.