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).

Sintaks

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;

Anggota

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.

PhysicalDeviceObject

Penunjuk ke PDO untuk perangkat.

InterruptObject

Penunjuk ke lokasi yang menerima penunjuk ke kumpulan objek interupsi untuk perangkat.

ServiceRoutine

Penunjuk ke rutinitas InterruptService untuk mendaftar sebagai ISR untuk interupsi perangkat.

ServiceContext

Menentukan nilai yang akan diteruskan sebagai parameter ServiceContext dari rutinitas InterruptService .

SpinLock

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.

MenyinkronkanIrql

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.

FloatingSave

Menentukan apakah sistem menyimpan status floating-point prosesor ketika interupsi terjadi. Jika TRUE, sistem menyimpan status floating-point.

ShareVector

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.

Vektor

Menentukan vektor interupsi yang diteruskan dalam sumber daya CmResourceTypeInterrupt di anggota CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Vector.

Irql

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.

InterruptMode

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.

ProcessorEnableMask

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.

Grup

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.

PhysicalDeviceObject

Penunjuk ke objek perangkat fisik (PDO) perangkat.

InterruptObject

Penunjuk ke lokasi yang menerima penunjuk ke kumpulan objek interupsi untuk perangkat.

ServiceRoutine

Penunjuk ke rutinitas InterruptService untuk mendaftar sebagai ISR untuk interupsi perangkat.

ServiceContext

Menentukan nilai yang akan diteruskan sebagai parameter ServiceContext dari rutinitas InterruptService .

SpinLock

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.

MenyinkronkanIrql

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.

FloatingSave

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.

PhysicalDeviceObject

Penunjuk ke PDO perangkat.

ConnectionContext

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.

Generik

Penunjuk ke variabel PVOID di mana rutinitas IoConnectInterruptEx menulis pointer ke konteks koneksi.

InterruptMessageTable

Penunjuk ke variabel PIO_INTERRUPT_MESSAGE_INFO di mana rutinitas IoConnectInterruptEx menulis pointer ke konteks koneksi.

InterruptObject

Penunjuk ke variabel PKINTERRUPT tempat rutinitas IoConnectInterruptEx menulis pointer ke konteks koneksi.

MessageServiceRoutine

Penunjuk ke rutinitas InterruptMessageService untuk mendaftar sebagai ISR untuk interupsi perangkat.

ServiceContext

Menentukan nilai yang akan diteruskan sebagai parameter ServiceContext dari rutinitas InterruptMessageService atau InterruptService untuk interupsi.

SpinLock

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.

MenyinkronkanIrql

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.

FloatingSave

Menentukan apakah sistem menyimpan status floating-point prosesor ketika interupsi terjadi. Jika TRUE, sistem menyimpan status floating-point.

FallBackServiceRoutine

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.

Keterangan

Rutinitas IoConnectInterruptEx mengambil parameter Parameter tunggal, yang menunjuk ke struktur IO_CONNECT_INTERRUPT_PARAMETERS yang berisi semua parameter operasi.

Persyaratan

Persyaratan Nilai
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)

Lihat juga

IoConnectInterruptEx