共用方式為


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

指定傳入插斷資源的插斷向量 u.Interrupt.Vector 成員 CM_PARTIAL_RESOURCE_DESCRIPTOR

[in] Irql

指定傳入插斷資源的 DIRQL,u.Interrupt.Level 成員 CM_PARTIAL_RESOURCE_DESCRIPTOR

[in] SynchronizeIrql

指定ISR執行所在的 DIRQL。 如果ISR處理多個插斷向量,或驅動程式有多個ISR,此值必須是每個中斷資源中傳遞 u.Interrupt.Level 之 irql 值中最高的。 否則,IrqlSynchronizeIrql 值相同。

[in] InterruptMode

指定裝置中斷是 LevelSensitive,還是 闩鎖

[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 要求時,驅動程式會分別在 Parameters.StartDevice.AllocatedResourcesParameters.StartDevice.AllocatedResourcesTranslated IRP IO_STACK_LOCATION 結構的成員接收原始和轉譯的硬體資源。 為了連接中斷,驅動程式會使用 AllocatedResourcesTranslated.List.PartialResourceList.PartialDescriptors[]的資源。 驅動程式必須掃描部分描述元的陣列,以尋找類型為 CmResourceTypeInterrupt的資源。

如果驅動程式提供 SpinLock的記憶體,則必須先呼叫 KeInitializeSpinLock,再將其中斷微調鎖定傳遞至 ioConnectInterrupt

從成功呼叫 ioConnectInterrupt傳回時,如果在驅動程式的裝置上啟用中斷,或如果 shareVector 設定為 TRUE,則可以呼叫呼叫端的 ISR。 驅動程式必須等到 IoConnectInterrupt 傳回之後,才啟用中斷。

要求

要求 價值
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)IrqlIoPassive2(wdm)PowerIrpDDis(wdm)

另請參閱

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_STACK_LOCATION

IoDisconnectInterrupt

KeInitializeSpinLock

KeSynchronizeExecution