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 值中最高的。 否則,Irql 和 SynchronizeIrql 值相同。
[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.AllocatedResources 和 Parameters.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) |