struktur WDF_INTERRUPT_CONFIG (wdfinterrupt.h)
[Berlaku untuk KMDF dan UMDF]
Struktur WDF_INTERRUPT_CONFIG berisi informasi konfigurasi untuk gangguan perangkat.
Sintaks
typedef struct _WDF_INTERRUPT_CONFIG {
ULONG Size;
WDFSPINLOCK SpinLock;
WDF_TRI_STATE ShareVector;
BOOLEAN FloatingSave;
BOOLEAN AutomaticSerialization;
PFN_WDF_INTERRUPT_ISR EvtInterruptIsr;
PFN_WDF_INTERRUPT_DPC EvtInterruptDpc;
PFN_WDF_INTERRUPT_ENABLE EvtInterruptEnable;
PFN_WDF_INTERRUPT_DISABLE EvtInterruptDisable;
PFN_WDF_INTERRUPT_WORKITEM EvtInterruptWorkItem;
PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw;
PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated;
WDFWAITLOCK WaitLock;
BOOLEAN PassiveHandling;
WDF_TRI_STATE ReportInactiveOnPowerDown;
BOOLEAN CanWakeDevice;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;
Anggota
Size
Ukuran, dalam byte, dari struktur ini.
SpinLock
Handel ke objek spin-lock kerangka kerja, diperoleh dengan panggilan sebelumnya ke WdfSpinLockCreate, atau NULL. Jika parameter ini NULL, kerangka kerja menggunakan objek spin-lock internal. Kerangka kerja memperoleh kunci putar sebelum memanggil fungsi panggilan balik peristiwa EvtInterruptSynchronize driver dan ketika driver memanggil WdfInterruptAcquireLock. Untuk penanganan gangguan tingkat pasif, atur ke NULL.
Dimulai dengan UMDF versi 2.0, UMDF selalu menggunakan penanganan gangguan tingkat pasif. Dalam hal ini, atur anggota ini ke NULL.
ShareVector
Nilai yang ditik WDF_TRI_STATE. Jika nilai ini adalah WdfTrue, vektor interupsi dapat dibagikan. Jika nilainya adalah WdfFalse, vektor interupsi tidak dapat dibagikan. Jika nilainya adalah WdfDefault, manajer PnP menggunakan nilai driver bus.
FloatingSave
Nilai Boolean yang, jika TRUE, menunjukkan bahwa sistem akan menyimpan floating point prosesor dan status MMX saat perangkat terganggu. Jika FALSE, sistem tidak menyimpan titik pecahan dan status MMX. Driver harus mengatur nilai ini ke TRUE hanya jika fungsi panggilan balik EvtInterruptIsr harus menggunakan titik pecahan atau register MMX. Untuk informasi selengkapnya tentang menyimpan floating point dan status MMX, lihat Menggunakan Floating Point atau MMX di Driver WDM.
Anggota ini diabaikan mulai dari UMDF versi 2.0.
AutomaticSerialization
Nilai Boolean yang, jika TRUE, menunjukkan bahwa kerangka kerja akan menyinkronkan eksekusi fungsi panggilan balik objek interupsi EvtInterruptDpc atau EvtInterruptWorkItem dengan fungsi panggilan balik dari objek lain yang berada di bawah objek induk interupsi. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
EvtInterruptIsr
Penunjuk ke fungsi panggilan balik EvtInterruptIsr driver. Penunjuk ini tidak boleh NULL.
EvtInterruptDpc
Penunjuk ke fungsi panggilan balik EvtInterruptDpc driver, atau NULL. Driver dapat menyediakan EvtInterruptWorkItem atau EvtInterruptDpc, tetapi tidak keduanya.
EvtInterruptEnable
Penunjuk ke fungsi panggilan balik EvtInterruptEnable driver, atau NULL.
EvtInterruptDisable
Penunjuk ke fungsi panggilan balik EvtInterruptDisable driver, atau NULL.
EvtInterruptWorkItem
Penunjuk ke fungsi panggilan balik EvtInterruptWorkItem driver, atau NULL. Driver dapat menyediakan EvtInterruptWorkItem atau EvtInterruptDpc, tetapi tidak keduanya. Anggota EvtInterruptWorkItem tersedia di KMDF versi 1.11 dan yang lebih baru.
InterruptRaw
Penunjuk ke struktur CM_PARTIAL_RESOURCE_DESCRIPTOR yang menjelaskan sumber daya mentah yang ditetapkan sistem untuk interupsi. Anggota ini hanya digunakan jika interupsi dibuat di panggilan balik EvtDevicePrepareHardware . Anggota InterruptRaw tersedia di kmDF versi 1.11 dan yang lebih baru.
InterruptTranslated
Penunjuk ke struktur CM_PARTIAL_RESOURCE_DESCRIPTOR yang menjelaskan sumber daya yang diterjemahkan yang ditetapkan sistem ke interupsi. Anggota ini hanya digunakan jika interupsi dibuat di panggilan balik EvtDevicePrepareHardware . Anggota InterruptTranslated tersedia di kmDF versi 1.11 dan yang lebih baru.
WaitLock
Handel ke objek kunci tunggu kerangka kerja, diperoleh dengan panggilan sebelumnya ke WdfWaitLockCreate, atau NULL. Jika WaitLock bukan NULL, PassiveHandling harus diatur ke TRUE. Anggota WaitLock tersedia di KMDF versi 1.11 dan yang lebih baru. Untuk informasi selengkapnya tentang WaitLock, lihat Keterangan.
PassiveHandling
Atur ke FALSE untuk penanganan interupsi di IRQL perangkat (DIRQL). Atur ke TRUE untuk penanganan gangguan tingkat pasif. Anggota PassiveHandling tersedia di kmDF versi 1.11 dan yang lebih baru. Mulai dari UMDF versi 2.0, WDF_INTERRUPT_CONFIG_INIT selalu mengatur anggota ini ke TRUE.
ReportInactiveOnPowerDown
Anggota ini hanya berlaku untuk KMDF.
Nilai jenis WDF_TRI_STATE yang hanya berlaku jika driver belum memanggil WdfDeviceInitSetPowerNotPageable. Anggota ini bisa memiliki salah satu nilai berikut:
WdfTrue - KMDF melaporkan gangguan tidak aktif ketika perangkat beralih ke status daya rendah (Dx). Dalam sistem operasi sebelum Windows 8, perilaku kerangka kerja cocok dengan yang dijelaskan untuk WdfFalse.
WdfFalse - KMDF memutuskan interupsi saat perangkat beralih ke status daya rendah (Dx).
WdfDefault - Pada platform berbasis ARM, perilaku kerangka kerja cocok dengan yang dijelaskan untuk WdfTrue. Pada platform lain, perilaku kerangka kerja cocok dengan yang dijelaskan untuk WdfFalse.
Anggota ReportInactiveOnPowerDown tersedia di KMDF versi 1.11 dan yang lebih baru. Ini tidak tersedia di UMDF versi 2.0.
Untuk informasi selengkapnya tentang melaporkan gangguan yang tidak aktif, lihat Membuat ISR Aktif atau Tidak Aktif.
CanWakeDevice
Nilai Boolean yang menunjukkan apakah gangguan digunakan untuk membangunkan perangkat dari status daya rendah. Jika FALSE, gangguan tidak digunakan untuk membangunkan perangkat. Jika TRUE, interupsi digunakan untuk membangunkan perangkat. Anggota CanWakeDevice tersedia mulai dari KMDF versi 1.13 dan UMDF versi 2.0.
Keterangan
Struktur WDF_INTERRUPT_CONFIG digunakan sebagai input ke WdfInterruptCreate.
Untuk menginisialisasi struktur WDF_INTERRUPT_CONFIG , driver Anda harus terlebih dahulu memanggil WDF_INTERRUPT_CONFIG_INIT lalu mengisi anggota struktur yang tidak diinisialisasi WDF_INTERRUPT_CONFIG_INIT .
Jika AutomaticSerialization TRUE, aturan berikut berlaku:
- Jika tingkat eksekusi objek induk interupsi adalah WdfExecutionLevelPassive, driver dapat menyediakan EvtInterruptWorkItem, tetapi tidak boleh menyediakan EvtInterruptDpc dalam struktur konfigurasi ini.
- Jika tingkat eksekusi objek induk interupsi adalah WdfExecutionLevelDispatch, driver dapat menyediakan EvtInterruptDpc, tetapi tidak boleh menyediakan EvtInterruptWorkItem dalam struktur konfigurasi ini. Dalam kasus kedua ini, objek interupsi itu sendiri masih bisa pasif.
Untuk informasi selengkapnya tentang AutomaticSerialization dan menyinkronkan fungsi panggilan balik driver, lihat Teknik Sinkronisasi untuk Driver Framework-Based.
Secara default, driver fungsi KMDF dapat di-pageable daya. Driver memanggil WdfDeviceInitSetPowerNotPageable untuk menentukan bahwa itu tidak dapat di-power pageable.
Dalam versi KMDF yang lebih lama dari 1.11, kerangka kerja selalu memutuskan gangguan driver yang dapat di-pageable daya ketika perangkat beralih ke status daya rendah (Dx). Mulai dari KMDF versi 1.11, Anda dapat mengubah perilaku ini dengan mengatur anggota ReportInactiveOnPowerDown dari struktur ini. Untuk driver yang tidak dapat di-power pageable, gangguan tetap terhubung ketika transisi status Dx terjadi, terlepas dari nilai yang ditetapkan di ReportInactiveOnPowerDown.
Jika driver UMDF menetapkan ReportInactiveOnPowerDown, nilai diabaikan.
Untuk informasi selengkapnya tentang penanganan gangguan dalam driver berbasis kerangka kerja, lihat Menangani Gangguan Perangkat Keras.
Driver dapat menggunakan anggota CanWakeDevice struktur ini untuk membuat gangguan yang dapat digunakan untuk membawa perangkat dari status Dx berdaya rendah kembali ke D0. Rutinitas panggilan balik EvtInterruptIsr driver dijadwalkan untuk berjalan di IRQL = PASSIVE_LEVEL setelah perangkat memasuki D0.
Untuk informasi selengkapnya, lihat Menggunakan Interupsi untuk Membangunkan Perangkat.
Persyaratan
Persyaratan | Nilai |
---|---|
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdfinterrupt.h (termasuk Wdf.h) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk