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 開始提供。
目標平臺 環球
標頭 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