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 值上限。 否則, IrqlSynchronizeIrql 值完全相同。

[in] InterruptMode

指定裝置中斷是否為 LevelSensitiveLatched

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

另請參閱

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_STACK_LOCATION

IoDisconnectInterrupt

KeInitializeSpinLock

KeSynchronizeExecution