IO_CONNECT_INTERRUPT_PARAMETERS 結構包含驅動程式提供給 IoConnectInterruptEx 例程的參數,以註冊中斷服務例程 (ISR)。
語法
typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
ULONG Version;
union {
IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
};
} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
成員
Version
在輸入上,指定要由 IoConnectInterruptEx執行的特定作業,如下所示。
版本值 | IoConnectInterruptEx 作業 |
---|---|
CONNECT_FULLY_SPECIFIED | 使用隨插即用 (PnP) 管理員提供的資訊連線到特定中斷。 使用 FullySpecified 成員來提供作業的其他參數。 |
CONNECT_LINE_BASED | 為裝置的線路型中斷註冊 InterruptService 例程。 使用 LineBased 成員來提供作業的其他參數。 |
CONNECT_MESSAGE_BASED | 註冊裝置訊息訊號中斷的 InterruptMessageService 例程。 如果裝置只有以行為基礎的中斷,呼叫端也可以指定後援 InterruptService 例程。 使用 MessageBased 成員來提供作業的其他參數。 |
傳回時,例程會提供作業的相關信息,如下所示。
版本值 | 描述 |
---|---|
CONNECT_FULLY_SPECIFIED | 在不支援 版本 的平臺上,指定CONNECT_LINE_BASED或CONNECT_MESSAGE_BASED呼叫端。 使用 CONNECT_FULLY_SPECIFIED重試作業。 |
CONNECT_LINE_BASED | 已註冊呼叫端指定的CONNECT_MESSAGE_BASED和呼叫端的後援 InterruptService 例程。 |
CONNECT_MESSAGE_BASED | 已註冊呼叫端指定的CONNECT_MESSAGE_BASED和呼叫端的 InterruptMessageService 例程。 |
FullySpecified
指定 IoConnectInterruptEx 當 Version 具有CONNECT_FULLY_SPECIFIED值時所要執行作業的其他參數(如果使用 Group 成員,則為 CONNECT_FULLY_SPECIFIED_GROUP)。 如需詳細資訊,請參閱使用ioConnectInterruptEx CONNECT_FULLY_SPECIFIED 版的。
PhysicalDeviceObject
裝置之 PDO 的指標。
InterruptObject
接收裝置之中斷物件集指標的位置指標。
ServiceRoutine
InterruptService 例程的指標,以註冊為裝置中斷的 ISR。
ServiceContext
指定要當做 InterruptService 例程的 ServiceContext 參數傳遞的值。
SpinLock
微調鎖定的指標,做為一組中斷的中斷微調鎖定,或 NULL。 如果 NULL,系統會配置微調鎖定作為中斷微調鎖定。 如果非NULL,您應該已使用 KeInitializeSpinLock初始化微調鎖定。
SynchronizeIrql
指定ISR執行所在的 DIRQL。 如果ISR處理多個中斷向量或驅動程式有多個ISR,這個值必須是一組中斷的最大 IRQL。 中斷的 IRQL 會在 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level 成員的 CmResourceTypeInterrupt 資源中傳遞。 否則,Irql 和 SynchronizeIrql 值相同。
FloatingSave
指定當中斷發生時,系統是否儲存處理器的浮點狀態。 如果 TRUE,則系統會儲存浮點狀態。
ShareVector
指定插斷向量是否可共用。 線路型PCI中斷必須可共用。 針對訊息訊號 PCI 中斷,驅動程式寫入器可以選擇其插斷是否可共用,但應該選擇讓它們依預設可共用。
向量
指定在 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Vector 成員 CmResourceTypeInterrupt 資源中傳遞的插斷向量。
Irql
指定在 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level 成員 CmResourceTypeInterrupt 資源中傳遞的 DIRQL。 從 Windows 8 開始,驅動程式可以藉由將 Irql 和 SynchronizeIrql 設定為 PASSIVE_LEVEL,並將 SpinLock 設定為 NULL,以註冊以被動層級執行的 ISR。 如需詳細資訊,請參閱使用 Passive-Level 中斷服務例程 。
InterruptMode
指定 KINTERRUPT_MODE,判斷中斷是否為層級觸發(InterruptMode = LevelSensitive) 或邊緣觸發的 (InterruptMode = Latched)。 針對PCI總線的共享中斷線路,請指定 LevelSensitive。 針對 PCI 訊息訊號中斷,請指定 闩鎖。
ProcessorEnableMask
指定 KAFFINITY 遮罩,代表裝置中斷可能發生的處理器集。 此值會在 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Affinity 成員的 CmResourceTypeInterrupt 資源中傳遞。
群
指定組號,識別要傳遞中斷的處理器群組。 一般而言,驅動程式會在 IRP_MN_START_DEVICE 要求中包含的翻譯資源中接收其群組編號。 從 Windows 7 開始,如果 IO_CONNECT_INTERRUPT_PARAMETERS 結構的 版本 成員設定為 CONNECT_FULLY_SPECIFIED_GROUP,則會使用 Group 成員。 如果 版本 設定為 CONNECT_FULLY_SPECIFIED,則會忽略 群組 成員,在此情況下,中斷傳遞的群組編號一律為 0。
LineBased
指定當 Version 值為 CONNECT_LINE_BASED 時,IoConnectInterruptEx 所執行作業的其他參數。 如需詳細資訊,請參閱 使用ioConnectInterruptExCONNECT_LINE_BASED 版本。
PhysicalDeviceObject
裝置實體裝置物件 (PDO) 的指標。
InterruptObject
接收裝置之中斷物件集指標的位置指標。
ServiceRoutine
InterruptService 例程的指標,以註冊為裝置中斷的 ISR。
ServiceContext
指定要當做 InterruptService 例程的 ServiceContext 參數傳遞的值。
SpinLock
微調鎖定的指標,做為一組中斷的中斷微調鎖定,或 NULL。 如果 NULL,系統會配置微調鎖定作為中斷微調鎖定。 如果非NULL,您應該已使用 KeInitializeSpinLock初始化微調鎖定。
SynchronizeIrql
指定 ISR 執行的最低裝置 IRQL (DIRQL)。 只有在大於一組中斷的最大 IRQL 時,系統才會使用此值;否則,系統會使用最大 IRQL。 驅動程式幾乎一律指定PASSIVE_LEVEL SynchronizeIrql。 (只有在ISR必須在特定 IRQL 上方執行時,驅動程式才應該指定 PASSIVE_LEVEL 以外的值。從 Windows 8 開始,指派給裝置的一組行型中斷資源可以共用在 IRQL = PASSIVE_LEVEL執行的 ISR。 如果 SynchronizeIrql = PASSIVE_LEVEL,而且此組中斷的最大 IRQL 是PASSIVE_LEVEL,則會在 PASSIVE_LEVEL 呼叫 InterruptService 例程。 如需詳細資訊,請參閱使用 Passive-Level 中斷服務例程 。
FloatingSave
指定當中斷發生時,系統是否儲存處理器的浮點狀態。 如果 TRUE,則系統會儲存浮點狀態。 針對 x86 型和 Itanium 型平臺,此值必須設定為 false 。 如需儲存浮點和 MMX 狀態的詳細資訊,請參閱在 WDM 驅動程式中使用浮點或 MMX 。
MessageBased
指定當 Version 值為 CONNECT_MESSAGE_BASED 時,IoConnectInterruptEx 所執行作業的其他參數。 如需詳細資訊,請參閱 使用ioConnectInterruptEx CONNECT_MESSAGE_BASEDCONNECT_MESSAGE_BASED版本。
PhysicalDeviceObject
裝置 PDO 的指標。
ConnectionContext
接收連接內容指標之位置的指標。 如果傳回 Version 具有 CONNECT_LINE_BASED 的值,則例程會提供 KINTERRUPT 結構的 指標。 如果傳回 Version 的值為 CONNECT_MESSAGE_BASED,例程會提供 IO_INTERRUPT_MESSAGE_INFO 結構的指標。
若要將轉型降到最低,ConnectionContext 定義為等位。 使用 ConnectionContext.Generic 將位置視為 PVOID。 使用 ConnectionContext.InterruptObject 和 ConnectionContext.InterruptMessageTable 分別將位置視為 PKINTERRUPT 或 PIO_INTERRUPT_MESSAGE_INFO 變數。
通用
PVOID 變數的指標,IoConnectInterruptEx 例程會將指標寫入連線內容。
InterruptMessageTable
PIO_INTERRUPT_MESSAGE_INFO變數的指標,IoConnectInterruptEx 例程會將指標寫入連線內容。
InterruptObject
PKINTERRUPT 變數的指標,IoConnectInterruptEx 例程會將指標寫入連線內容。
MessageServiceRoutine
InterruptMessageService 例程的指標,以註冊為裝置中斷的 ISR。
ServiceContext
指定要作為中斷 InterruptMessageService 或 InterruptService 例程的 ServiceContext 參數傳遞的值。
SpinLock
微調鎖定的指標,做為一組中斷的中斷微調鎖定,或 NULL。 如果 NULL,系統會配置微調鎖定作為中斷微調鎖定。 如果非NULL,您應該已使用 KeInitializeSpinLock初始化微調鎖定。
SynchronizeIrql
指定 ISR 執行的最低裝置 IRQL (DIRQL)。 如果系統大於一組中斷的最大 IRQL,則系統只會使用此值;否則,系統會使用最大 IRQL。 驅動程式幾乎一律指定PASSIVE_LEVEL SynchronizeIrql。
FloatingSave
指定當中斷發生時,系統是否儲存處理器的浮點狀態。 如果 TRUE,則系統會儲存浮點狀態。
FallBackServiceRoutine
InterruptService 的指標 例程,做為行型中斷的 ISR。 如果裝置沒有訊息信號中斷,但有以線路為基礎的中斷,則系統會註冊此例程來處理以線路為基礎的中斷。
言論
IoConnectInterruptEx 例程會採用單一 Parameters 參數,其指向包含作業所有參數的 IO_CONNECT_INTERRUPT_PARAMETERS 結構。
要求
要求 | 價值 |
---|---|
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |