ioConnectInterrupt 函式 (wdm.h)
IoConnectInterrupt 例程會註冊設備驅動器的 InterruptService 例程 (ISR) ,以便在裝置在任何指定的處理器集中斷時呼叫它。
語法
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
);
參數
[out] InterruptObject
針對一組中斷物件指標的驅動程式提供的記憶體位址指標。 此指標必須傳遞至 KeSynchronizeExecution 的後續呼叫。
[in] ServiceRoutine
驅動程式提供的 InterruptService 例程進入點指標。
[in, optional] ServiceContext
呼叫時會提供給 InterruptService 例程之驅動程式決定內容的指標。 ServiceContext 區域必須位於駐留記憶體中:在驅動程式建立裝置對象的裝置延伸模組、驅動程式建立控制器物件的控制器延伸模組中,或裝置驅動程式所配置的非分頁集區中。 如需詳細資訊,請參閱 提供ISR內容資訊 。
[in, optional] SpinLock
驅動程式提供記憶體的初始化微調鎖定指標,用來同步處理其他驅動程式例程所共用之驅動程式決定數據的存取。 如果ISR處理一個以上的向量,或驅動程式有多個ISR,則需要此參數。 否則,驅動程式不需要為中斷微調鎖定配置記憶體,而且輸入指標為 NULL。
[in] Vector
指定在 CM_PARTIAL_RESOURCE_DESCRIPTOR的 u.Interrupt.Vector 成員上傳入中斷資源的中斷向量。
[in] Irql
指定在 CM_PARTIAL_RESOURCE_DESCRIPTOR 的 u.Interrupt.Level 成員中傳入中斷資源的 DIRQL。
[in] SynchronizeIrql
指定ISR執行所在的 DIRQL。 如果ISR處理多個中斷向量,或驅動程式有多個ISR,此值必須是每個中斷資源中於 u.Interrupt.Level 傳遞的 Irql 值上限。 否則, Irql 和 SynchronizeIrql 值完全相同。
[in] InterruptMode
指定裝置中斷是否為 LevelSensitive 或 Latched。
[in] ShareVector
指定中斷向量是否可共用。
[in] ProcessorEnableMask
指定 KAFFINITY 值,代表此平臺中可發生裝置中斷的處理器集。 此值會在 u.Interrupt.Affinity 的中斷資源中傳遞。
[in] FloatingSave
指定當驅動程式的裝置中斷時,是否要儲存浮點堆疊。 針對 x86 型和 Itanium 型平臺,此值必須設定為 FALSE。 如需儲存浮點和MMX狀態的詳細資訊,請參閱 在WDM驅動程式中使用浮點或MMX。
傳回值
IoConnectInterrupt 可以傳回下列其中一個 NTSTATUS 值:
STATUS_SUCCESS
STATUS_INVALID_PARAMETER:未指定處理器。
STATUS_INSUFFICIENT_RESOURCES:沒有足夠的非分頁集區。
備註
新的驅動程序應該使用 IoConnectInterruptEx 例程,這更容易使用。 支援訊息訊號中斷 (MSI) 裝置的驅動程序必須使用 IoConnectInterruptEx。
PnP 驅動程式應該在裝置啟動過程中呼叫 IoConnectInterrupt ,才能完成 PnP IRP_MN_START_DEVICE 要求。
當驅動程式收到IRP_MN_START_DEVICE要求時,驅動程式會在 IRP IO_STACK_LOCATION 結構的 Parameters.StartDevice.AllocatedResources 和 Parameters.StartDevice.AllocatedResourcesTranslated 成員中分別收到原始和轉譯的硬體資源。 為了連接中斷,驅動程式會使用 AllocatedResourcesTranslated.List.PartialResourceList.PartialDescriptors[]的資源。 驅動程式必須掃描部分描述項陣列,以取得 CmResourceTypeInterrupt 類型的資源。
如果驅動程式提供 SpinLock 的記憶體,它必須先呼叫 KeInitializeSpinLock ,再將其中斷微調鎖定傳遞至 IoConnectInterrupt。
從成功呼叫 IoConnectInterrupt 傳回時,如果在驅動程式的裝置上啟用中斷,或 ShareVector 設定為 TRUE,就可以呼叫呼叫者的 ISR。 在 IoConnectInterrupt 傳回之後,驅動程式不得啟用中斷。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 IrqlIoPassive2 (wdm) 、 PowerIrpDDis (wdm) |