struktur IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)
Struktur IO_CONNECT_INTERRUPT_PARAMETERS berisi parameter yang disediakan driver ke rutinitas IoConnectInterruptEx untuk mendaftarkan rutinitas layanan interupsi (ISR).
typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
ULONG Version;
union {
IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
};
} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
Version
Pada input, menentukan operasi tertentu yang akan dilakukan oleh IoConnectInterruptEx, sebagai berikut.
Nilai versi | Operasi IoConnectInterruptEx |
---|---|
CONNECT_FULLY_SPECIFIED | Menyambungkan ke interupsi tertentu menggunakan informasi yang disediakan oleh manajer Plug and Play (PnP). Gunakan anggota FullySpecified untuk memberikan parameter tambahan operasi. |
CONNECT_LINE_BASED | Mendaftarkan rutinitas InterruptService untuk interupsi berbasis lini perangkat. Gunakan anggota LineBased untuk memberikan parameter tambahan operasi. |
CONNECT_MESSAGE_BASED | Mendaftarkan rutinitas InterruptMessageService untuk interupsi yang disinyalkan pesan perangkat. Pemanggil juga dapat menentukan rutinitas InterruptService fallback jika perangkat hanya memiliki gangguan berbasis baris. Gunakan anggota MessageBased untuk memberikan parameter tambahan operasi. |
Saat kembali, rutinitas memberikan informasi tentang operasi, sebagai berikut.
Nilai versi | Deskripsi |
---|---|
CONNECT_FULLY_SPECIFIED | Penelepon menentukan CONNECT_LINE_BASED atau CONNECT_MESSAGE_BASED untuk Versi pada platform yang tidak mendukungnya. Coba lagi operasi menggunakan CONNECT_FULLY_SPECIFIED. |
CONNECT_LINE_BASED | Pemanggil yang ditentukan CONNECT_MESSAGE_BASED dan rutinitas InterruptService fallback penelepon didaftarkan. |
CONNECT_MESSAGE_BASED | Penelepon yang ditentukan CONNECT_MESSAGE_BASED dan rutinitas InterruptMessageService penelepon terdaftar. |
FullySpecified
Menentukan parameter tambahan operasi yang akan dilakukan oleh IoConnectInterruptEx saat Versi memiliki nilai CONNECT_FULLY_SPECIFIED (atau CONNECT_FULLY_SPECIFIED_GROUP jika anggota Grup digunakan). Untuk informasi selengkapnya, lihat Menggunakan Versi CONNECT_FULLY_SPECIFIED IoConnectInterruptEx.
Penunjuk ke PDO untuk perangkat.
Penunjuk ke lokasi yang menerima penunjuk ke kumpulan objek interupsi untuk perangkat.
Penunjuk ke rutinitas InterruptService untuk mendaftar sebagai ISR untuk interupsi perangkat.
Menentukan nilai yang akan diteruskan sebagai parameter ServiceContext dari rutinitas InterruptService .
Baik pointer ke kunci spin untuk berfungsi sebagai kunci spin interupsi untuk set interupsi, atau NULL. Jika NULL, sistem mengalokasikan kunci spin untuk berfungsi sebagai kunci spin interupsi. Jika non-NULL, Anda seharusnya menginisialisasi kunci putar dengan KeInitializeSpinLock.
Menentukan DIRQL tempat ISR akan berjalan. Jika ISR menangani lebih dari satu vektor interupsi atau driver memiliki lebih dari satu ISR, nilai ini harus menjadi IRQL maksimum dari set gangguan. IRQL untuk interupsi diteruskan dalam sumber daya CmResourceTypeInterrupt di anggota CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level. Jika tidak, nilai Irql dan SynchronizeIrql identik.
Menentukan apakah sistem menyimpan status floating-point prosesor ketika interupsi terjadi. Jika TRUE, sistem menyimpan status floating-point.
Menentukan apakah vektor interupsi dapat dibagikan. Interupsi PCI berbasis garis harus dapat dibagi. Untuk interupsi PCI yang diberi sinyal pesan, penulis driver dapat memilih apakah interupsinya dapat dibagikan, tetapi harus memilih untuk membuatnya dapat dibagikan secara default.
Menentukan vektor interupsi yang diteruskan dalam sumber daya CmResourceTypeInterrupt di anggota CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Vector.
Menentukan DIRQL yang diteruskan dalam sumber daya CmResourceTypeInterrupt di anggota CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level. Dimulai dengan Windows 8, driver dapat mendaftarkan ISR yang berjalan pada tingkat pasif dengan mengatur Irql dan SynchronizeIrql ke PASSIVE_LEVEL, dan mengatur SpinLock ke NULL. Untuk informasi selengkapnya, lihat Menggunakan Rutinitas Layanan Interupsi Passive-Level.
Menentukan KINTERRUPT_MODE yang menentukan apakah interupsi dipicu tingkat (InterruptMode = LevelSensitive) atau dipicu tepi (InterruptMode = Latched). Untuk baris interupsi bersama dari bus PCI, tentukan LevelSensitive. Untuk interupsi sinyal pesan PCI, tentukan Latched.
Menentukan masker KAFFINITY yang mewakili set prosesor tempat interupsi perangkat dapat terjadi. Nilai ini diteruskan dalam sumber daya CmResourceTypeInterrupt di anggota u.Interrupt.AffinityCM_PARTIAL_RESOURCE_DESCRIPTOR.
Menentukan nomor grup yang mengidentifikasi grup prosesor tempat interupsi akan dikirimkan. Biasanya, driver menerima nomor grupnya sebagai bagian dari sumber daya yang diterjemahkan yang disertakan dalam permintaan IRP_MN_START_DEVICE . Dimulai dengan Windows 7, anggota Grup digunakan jika anggota Versi struktur IO_CONNECT_INTERRUPT_PARAMETERS diatur ke CONNECT_FULLY_SPECIFIED_GROUP. Anggota Grup diabaikan jika Versi diatur ke CONNECT_FULLY_SPECIFIED, dalam hal ini nomor grup untuk pengiriman interupsi selalu 0.
LineBased
Menentukan parameter tambahan operasi yang akan dilakukan oleh IoConnectInterruptEx saat Versi memiliki nilai CONNECT_LINE_BASED. Untuk informasi selengkapnya, lihat Menggunakan Versi CONNECT_LINE_BASED IoConnectInterruptEx.
Penunjuk ke objek perangkat fisik (PDO) perangkat.
Penunjuk ke lokasi yang menerima penunjuk ke kumpulan objek interupsi untuk perangkat.
Penunjuk ke rutinitas InterruptService untuk mendaftar sebagai ISR untuk interupsi perangkat.
Menentukan nilai yang akan diteruskan sebagai parameter ServiceContext dari rutinitas InterruptService .
Baik pointer ke kunci spin untuk berfungsi sebagai kunci spin interupsi untuk set interupsi, atau NULL. Jika NULL, sistem mengalokasikan kunci spin untuk berfungsi sebagai kunci spin interupsi. Jika non-NULL, Anda seharusnya menginisialisasi kunci putar dengan KeInitializeSpinLock.
Menentukan IRQL perangkat minimum (DIRQL) tempat ISR berjalan. Sistem menggunakan nilai ini hanya jika lebih besar dari IRQL maksimum dari set interupsi; jika tidak, sistem menggunakan IRQL maksimum. Driver hampir selalu menentukan PASSIVE_LEVEL untuk SynchronizeIrql. (Driver harus menentukan nilai selain PASSIVE_LEVEL hanya jika ISR harus berjalan di atas IRQL tertentu.) Dimulai dengan Windows 8, sekumpulan sumber daya interupsi berbasis garis yang ditetapkan ke perangkat dapat berbagi ISR yang berjalan di IRQL = PASSIVE_LEVEL. Jika SynchronizeIrql = PASSIVE_LEVEL, dan IRQL maksimum dari set interupsi ini PASSIVE_LEVEL, rutinitas InterruptService dipanggil pada PASSIVE_LEVEL. Untuk informasi selengkapnya, lihat Menggunakan Rutinitas Layanan Interupsi Passive-Level.
Menentukan apakah sistem menyimpan status floating-point prosesor ketika interupsi terjadi. Jika TRUE, sistem menyimpan status floating-point. Untuk platform berbasis x86 dan berbasis Itanium, nilai ini harus diatur ke FALSE. Untuk informasi selengkapnya tentang menyimpan floating-point dan status MMX, lihat Menggunakan Floating Point atau MMX dalam Driver WDM.
MessageBased
Menentukan parameter tambahan operasi yang akan dilakukan oleh IoConnectInterruptEx saat Versi memiliki nilai CONNECT_MESSAGE_BASED. Untuk informasi selengkapnya, lihat Menggunakan Versi CONNECT_MESSAGE_BASED IoConnectInterruptEx.
Penunjuk ke PDO perangkat.
Penunjuk ke lokasi yang menerima penunjuk ke konteks koneksi. Jika pada Versi yang dikembalikan memiliki nilai CONNECT_LINE_BASED, rutinitas menyediakan penunjuk ke struktur KINTERRUPT . Jika Versi yang dikembalikan memiliki nilai CONNECT_MESSAGE_BASED, rutinitas menyediakan penunjuk ke struktur IO_INTERRUPT_MESSAGE_INFO .
Untuk meminimalkan transmisi, ConnectionContext didefinisikan sebagai gabungan. Gunakan ConnectionContext.Generic untuk memperlakukan lokasi sebagai PVOID. Gunakan ConnectionContext.InterruptObject dan ConnectionContext.InterruptMessageTable untuk memperlakukan lokasi sebagai variabel PKINTERRUPT atau PIO_INTERRUPT_MESSAGE_INFO masing-masing.
Penunjuk ke variabel PVOID di mana rutinitas IoConnectInterruptEx menulis pointer ke konteks koneksi.
Penunjuk ke variabel PIO_INTERRUPT_MESSAGE_INFO di mana rutinitas IoConnectInterruptEx menulis pointer ke konteks koneksi.
Penunjuk ke variabel PKINTERRUPT tempat rutinitas IoConnectInterruptEx menulis pointer ke konteks koneksi.
Penunjuk ke rutinitas InterruptMessageService untuk mendaftar sebagai ISR untuk interupsi perangkat.
Menentukan nilai yang akan diteruskan sebagai parameter ServiceContext dari rutinitas InterruptMessageService atau InterruptService untuk interupsi.
Baik pointer ke kunci spin untuk berfungsi sebagai kunci spin interupsi untuk set interupsi, atau NULL. Jika NULL, sistem mengalokasikan kunci spin untuk berfungsi sebagai kunci spin interupsi. Jika non-NULL, Anda seharusnya menginisialisasi kunci putar dengan KeInitializeSpinLock.
Menentukan IRQL perangkat minimum (DIRQL) tempat ISR berjalan. Sistem hanya menggunakan nilai ini jika lebih besar dari IRQL maksimum dari set interupsi; jika tidak, sistem menggunakan IRQL maksimum. Driver hampir selalu menentukan PASSIVE_LEVEL untuk SynchronizeIrql.
Menentukan apakah sistem menyimpan status floating-point prosesor ketika interupsi terjadi. Jika TRUE, sistem menyimpan status floating-point.
Penunjuk ke rutinitas InterruptService untuk digunakan sebagai ISR untuk interupsi berbasis garis. Jika perangkat tidak memiliki interupsi yang disinyalkan pesan, tetapi memiliki gangguan berbasis garis, sistem mendaftarkan rutinitas ini untuk menangani gangguan berbasis garis.
Rutinitas IoConnectInterruptEx mengambil parameter Parameter tunggal, yang menunjuk ke struktur IO_CONNECT_INTERRUPT_PARAMETERS yang berisi semua parameter operasi.
Persyaratan | Nilai |
---|---|
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |