Bagikan melalui


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)

Lihat juga

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_STACK_LOCATION

IoDisconnectInterrupt

KeInitializeSpinLock

KeSynchronizeExecution