Fungsi IoConnectInterrupt (wdm.h)
Rutinitas IoConnectInterrupt mendaftarkan rutinitas InterruptService (ISR) driver perangkat, sehingga akan dipanggil ketika perangkat mengganggu salah satu set prosesor tertentu.
Sintaks
NTSTATUS IoConnectInterrupt(
[out] PKINTERRUPT *InterruptObject,
[in] PKSERVICE_ROUTINE ServiceRoutine,
[in, optional] PVOID ServiceContext,
[in, optional] PKSPIN_LOCK SpinLock,
[in] ULONG Vector,
[in] KIRQL Irql,
[in] KIRQL SynchronizeIrql,
[in] KINTERRUPT_MODE InterruptMode,
[in] BOOLEAN ShareVector,
[in] KAFFINITY ProcessorEnableMask,
[in] BOOLEAN FloatingSave
);
Parameter
[out] InterruptObject
Arahkan ke alamat penyimpanan yang disediakan driver untuk penunjuk ke sekumpulan objek interupsi. Pointer ini harus diteruskan dalam panggilan berikutnya ke KeSynchronizeExecution.
[in] ServiceRoutine
Penunjuk ke titik masuk untuk rutinitas InterruptService yang disediakan pengemudi.
[in, optional] ServiceContext
Arahkan ke konteks yang ditentukan driver yang akan disuplai ke rutinitas InterruptService saat dipanggil. Area ServiceContext harus berada dalam memori residen: dalam ekstensi perangkat objek perangkat yang dibuat driver, di ekstensi pengontrol objek pengontrol yang dibuat driver, atau di kumpulan yang tidak dialokasikan oleh driver perangkat. Lihat Memberikan Informasi Konteks ISR untuk detailnya.
[in, optional] SpinLock
Penunjuk ke kunci putar yang diinisialisasi, di mana driver memasok penyimpanan, yang akan digunakan untuk menyinkronkan akses ke data yang ditentukan driver yang dibagikan oleh rutinitas driver lainnya. Parameter ini diperlukan jika ISR menangani lebih dari satu vektor atau jika driver memiliki lebih dari satu ISR. Jika tidak, driver tidak perlu mengalokasikan penyimpanan untuk kunci spin interupsi dan penunjuk input adalah NULL.
[in] Vector
Menentukan vektor interupsi yang diteruskan dalam sumber daya interupsi pada anggota u.Interrupt.Vectordari CM_PARTIAL_RESOURCE_DESCRIPTOR.
[in] Irql
Menentukan DIRQL yang diteruskan dalam sumber daya interupsi di anggota u.Interrupt.LevelCM_PARTIAL_RESOURCE_DESCRIPTOR.
[in] SynchronizeIrql
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 nilai Irql tertinggi yang diteruskan di u.Interrupt.Level di setiap sumber daya yang mengganggu. Jika tidak, nilai Irql dan SynchronizeIrql identik.
[in] InterruptMode
Menentukan apakah interupsi perangkat bersifat LevelSensitive atau Latched.
[in] ShareVector
Menentukan apakah vektor interupsi dapat dibagikan.
[in] ProcessorEnableMask
Menentukan nilai KAFFINITY yang mewakili set prosesor tempat interupsi perangkat dapat terjadi di platform ini. Nilai ini diteruskan dalam sumber daya interupsi di u.Interrupt.Affinity.
[in] FloatingSave
Menentukan apakah akan menyimpan tumpukan floating-point saat perangkat driver terganggu. 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.
Nilai kembali
IoConnectInterrupt dapat mengembalikan salah satu nilai NTSTATUS berikut:
STATUS_SUCCESS
STATUS_INVALID_PARAMETER: Tidak ada prosesor yang ditentukan.
STATUS_INSUFFICIENT_RESOURCES: Tidak ada cukup kumpulan yang tidak bertumpuk.
Keterangan
Driver baru harus menggunakan rutinitas IoConnectInterruptEx , yang lebih mudah digunakan. Driver untuk perangkat yang mendukung interupsi bertanda pesan (MSI) harus menggunakan IoConnectInterruptEx.
Driver PnP harus memanggil IoConnectInterrupt sebagai bagian dari start-up perangkat, sebelum menyelesaikan permintaan PnP IRP_MN_START_DEVICE .
Saat driver menerima permintaan IRP_MN_START_DEVICE , driver menerima sumber daya perangkat keras mentah dan terjemahan di parameter.StartDevice.AllocatedResources dan Parameters.StartDevice.AllocatedResourcesTranslated anggota struktur IO_STACK_LOCATION IRP. Untuk menyambungkan interupsinya, driver menggunakan sumber daya di AllocatedResourcesTranslated.List.PartialResourceList.PartialDescriptors[]. Driver harus memindai array deskriptor parsial untuk sumber daya jenis CmResourceTypeInterrupt.
Jika driver memasok penyimpanan untuk SpinLock, driver harus memanggil KeInitializeSpinLock sebelum meneruskan kunci spin interupsinya ke IoConnectInterrupt.
Saat kembali dari panggilan yang berhasil ke IoConnectInterrupt, ISR pemanggil dapat dipanggil jika interupsi diaktifkan pada perangkat driver atau jika ShareVector diatur ke TRUE. Driver tidak boleh mengaktifkan interupsi sampai setelah IoConnectInterrupt kembali.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm) |