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.

Catatan Jika CanWakeDevice diatur ke TRUE dan ReportInactiveOnPowerDown diatur ke WdfTrue, kerangka kerja tidak melaporkan gangguan tidak aktif saat perangkat beralih ke status daya rendah.
 

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.
Driver dapat menggunakan anggota WaitLock struktur ini untuk menyediakan kunci interupsinya sendiri untuk penanganan gangguan tingkat pasif. Jika driver mengatur PassiveHandling ke TRUE tetapi tidak menyediakan WaitLock, kerangka kerja membuat kunci interupsi secara internal. Kerangka kerja memperoleh kunci interupsi tingkat pasif sebelum memanggil fungsi panggilan balik berikut:
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

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

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate