EVT_WDF_INTERRUPT_ISR fungsi panggilan balik (wdfinterrupt.h)

[Berlaku untuk KMDF dan UMDF]

Fungsi panggilan balik peristiwa EvtInterruptIsr driver melayani gangguan perangkat keras.

Sintaks

EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;

BOOLEAN EvtWdfInterruptIsr(
  [in] WDFINTERRUPT Interrupt,
  [in] ULONG MessageID
)
{...}

Parameter

[in] Interrupt

Handel ke objek interupsi kerangka kerja.

[in] MessageID

Jika perangkat menggunakan interupsi bertanda pesan (MSI), parameter ini adalah nomor pesan yang mengidentifikasi pesan interupsi perangkat keras perangkat. Jika tidak, nilai ini adalah 0.

Nilai kembali

Fungsi panggilan balik EvtInterruptIsr harus mengembalikan TRUE jika layanan fungsi mengganggu perangkat keras. Jika tidak, fungsi ini harus mengembalikan FALSE.

Keterangan

Untuk mendaftarkan fungsi panggilan balik EvtInterruptIsr , driver Anda harus menempatkan alamat fungsi panggilan balik dalam struktur WDF_INTERRUPT_CONFIG sebelum memanggil WdfInterruptCreate.

Fungsi panggilan balik EvtInterruptIsr adalah rutinitas layanan interupsi (ISR) driver berbasis kerangka kerja, yang dipanggil ketika terjadi gangguan perangkat keras.

Jika interupsi bukan dari perangkat keras tempat layanan fungsi panggilan balik EvtInterruptIsr ini, driver harus mengembalikan FALSE. Jika vektor interupsi sedang dibagikan, sistem memanggil rutinitas layanan interupsi lain.

Jika driver belum meminta penanganan tingkat pasif untuk objek interupsi, maka sebelum memanggil fungsi panggilan balik EvtInterruptIsr , kerangka kerja menaikkan IRQL prosesor ke IRQL perangkat (DIRQL) dan memperoleh kunci spin yang ditentukan driver dalam struktur WDF_INTERRUPT_CONFIG objek interupsi.

Karena fungsi panggilan balik EvtInterruptIsr dijalankan pada IRQL yang relatif tinggi, fungsi ini dapat memanggil sangat sedikit metode objek kerangka kerja atau rutinitas sistem. Selain itu, fungsi panggilan balik ini tidak dapat mengakses kode yang dapat dipaginasi .

Biasanya, fungsi panggilan balik EvtInterruptIsr menghapus gangguan perangkat keras dan menyimpan informasi apa pun yang mungkin hilang setelah fungsi panggilan balik kembali dan sistem menurunkan IRQL (karena menurunkan IRQL memungkinkan gangguan tambahan terjadi). Driver berbasis kerangka kerja menyimpan informasi tentang gangguan di ruang konteks objek interupsi.

Driver biasanya menyediakan fungsi panggilan balik EvtInterruptDpc untuk memproses informasi yang disimpan di IRQL yang lebih rendah. (Beberapa driver menyediakan satu atau beberapa fungsi panggilan balik EvtDpcFunc alih-alih fungsi panggilan balik EvtInterruptDpc .) Untuk informasi tentang menjadwalkan fungsi panggilan balik EvtInterruptDpc untuk eksekusi, lihat Melayani Interupsi.

Fungsi panggilan balik EvtInterruptIsr harus dapat melayani beberapa gangguan sebelum fungsi panggilan balik EvtInterruptDpc dijalankan. Oleh karena itu, driver mungkin harus menyimpan data interupsi dari beberapa gangguan, dan fungsi panggilan balik EvtInterruptIsr danEvtInterruptDpc mungkin harus menentukan data interupsi mana yang telah sepenuhnya diproses oleh driver dan yang belum.

Dimulai dengan KMDF versi 1.11, driver Anda dapat memberikan penanganan gangguan tingkat pasif. Jika driver telah meminta penanganan tingkat pasif untuk objek interupsi, maka sebelum memanggil fungsi panggilan balik EvtInterruptIsr interupsi tersebut di IRQL = PASSIVE_LEVEL, kerangka kerja memperoleh kunci interupsi tingkat pasif yang dikonfigurasi driver dalam struktur WDF_INTERRUPT_CONFIG objek interupsi. Seperti halnya penanganan interupsi di DIRQL, fungsi EvtInterruptIsr driver masih harus menyimpan informasi tentang gangguan untuk pemrosesan nanti.

Driver yang mendukung penanganan gangguan tingkat pasif dapat menyediakan fungsi panggilan balik EvtInterruptWorkItem atau EvtInterruptDpc untuk memproses informasi yang disimpan.

Untuk informasi selengkapnya tentang menangani gangguan dalam driver berbasis kerangka kerja, lihat Menangani Gangguan Perangkat Keras.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1,0
Versi UMDF minimum 2.0
Header wdfinterrupt.h (termasuk Wdf.h)
IRQL (Lihat bagian Keterangan.)

Lihat juga

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt