IO_CONNECT_INTERRUPT_PARAMETERS結構 (wdm.h)
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 | 在不支援它的平臺上,針對 Version 指定的呼叫端CONNECT_LINE_BASED或CONNECT_MESSAGE_BASED。 使用 CONNECT_FULLY_SPECIFIED 重試作業。 |
CONNECT_LINE_BASED | 指定的呼叫端CONNECT_MESSAGE_BASED,且呼叫端的後援 InterruptService 例程已註冊。 |
CONNECT_MESSAGE_BASED | 指定的呼叫端CONNECT_MESSAGE_BASED,而且呼叫端的 InterruptMessageService 例程已註冊。 |
FullySpecified
指定當 Version 的值為 CONNECT_FULLY_SPECIFIED (或 CONNECT_FULLY_SPECIFIED_GROUP 時,IoConnectInterruptEx 所要執行之作業的其他參數,如果群組成員是使用) 。 如需詳細資訊,請參閱 使用ioConnectInterruptEx CONNECT_FULLY_SPECIFIED版。
PhysicalDeviceObject
裝置 PDO 的指標。
InterruptObject
接收裝置之中斷物件集指標的位置指標。
ServiceRoutine
要註冊為裝置中斷之ISR之 InterruptService 例程的指標。
ServiceContext
指定要當做 InterruptService 例程之 ServiceContext 參數傳遞的值。
SpinLock
微調鎖定的指標,做為中斷集的中斷微調鎖定,或 為 NULL。 如果 為 NULL,系統會配置微調鎖定作為中斷微調鎖定。 如果不是 NULL,您應該已使用 KeInitializeSpinLock 初始化微調鎖定。
SynchronizeIrql
指定ISR執行所在的 DIRQL。 如果ISR處理多個中斷向量,或驅動程式有多個ISR,這個值必須是一組中斷的最大 IRQL。 中斷的 IRQL 會在 cmResourceTypeInterrupt 資源中傳入CM_PARTIAL_RESOURCE_DESCRIPTOR的 u.Interrupt.Level 成員。 否則, Irql 和 SynchronizeIrql 值完全相同。
FloatingSave
指定當中斷發生時,系統是否儲存處理器的浮點狀態。 如果 為 TRUE,則系統會儲存浮點狀態。
ShareVector
指定中斷向量是否可共用。 行型PCI中斷必須可共用。 針對訊息訊號 PCI 中斷,驅動程式寫入器可以選擇其中斷是否可共用,但應該選擇預設為可共用。
向量
指定在 CM_PARTIAL_RESOURCE_DESCRIPTOR u.Interrupt.Vector 成員的 CmResourceTypeInterrupt 資源中傳遞的插斷向量。
Irql
指定在 CM_PARTIAL_RESOURCE_DESCRIPTOR u.Interrupt.Level 成員的 CmResourceTypeInterrupt 資源中傳遞的 DIRQL。 從 Windows 8 開始,驅動程式可以註冊在被動層級執行的ISR,方法是將 Irql 和 SynchronizeIrql 設定為 PASSIVE_LEVEL,並將 SpinLock 設定為 NULL。 如需詳細資訊,請參閱 使用 Passive-Level 插斷服務例程。
InterruptMode
指定KINTERRUPT_MODE,判斷插斷是 (InterruptModeLevelSensitive) 還是邊緣觸發 (InterruptMode = = Latched) 觸發。 若為PCI總線的共享中斷線,請指定 LevelSensitive。 針對PCI訊息訊號中斷,指定 [閂鎖]。
ProcessorEnableMask
指定 KAFFINITY 遮罩,代表裝置中斷可能發生的一組處理器。 此值會傳入位於 CM_PARTIAL_RESOURCE_DESCRIPTOR u.Interrupt.Affinity 成員的 CmResourceTypeInterrupt 資源中。
分組
指定組號,識別要傳遞中斷的處理器群組。 一般而言,驅動程式會在 IRP_MN_START_DEVICE 要求中包含的翻譯資源中接收其組號。 從 Windows 7 開始,如果IO_CONNECT_INTERRUPT_PARAMETERS結構的 Version 成員設定為 CONNECT_FULLY_SPECIFIED_GROUP,則會使用群組成員。 如果 Version 設定為 CONNECT_FULLY_SPECIFIED,則會忽略 Group 成員,在此情況下,中斷傳遞的群組編號一律為 0。
LineBased
指定當 Version 的值為 CONNECT_LINE_BASED 時,IoConnectInterruptEx 所要執行之作業的其他參數。 如需詳細資訊,請參閱 使用ioConnectInterruptEx CONNECT_LINE_BASED版本。
PhysicalDeviceObject
實體裝置物件的指標, (裝置的 PDO) 。
InterruptObject
接收裝置之中斷物件集指標的位置指標。
ServiceRoutine
要註冊為裝置中斷之ISR之 InterruptService 例程的指標。
ServiceContext
指定要當做 InterruptService 例程之 ServiceContext 參數傳遞的值。
SpinLock
微調鎖定的指標,做為中斷集的中斷微調鎖定,或 為 NULL。 如果 為 NULL,系統會配置微調鎖定作為中斷微調鎖定。 如果不是 NULL,您應該已使用 KeInitializeSpinLock 初始化微調鎖定。
SynchronizeIrql
指定執行ISR的最小裝置 IRQL (DIRQL) 。 只有當此值大於一組中斷的最大 IRQL 時,系統才會使用此值;否則,系統會使用最大 IRQL。 驅動程序幾乎一律為 SynchronizeIrql 指定PASSIVE_LEVEL。 (只有在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_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變數。
泛型
IoConnectInterruptEx 例程寫入連接內容指標的 PVOID 變數指標。
InterruptMessageTable
PIO_INTERRUPT_MESSAGE_INFO變數的指標, IoConnectInterruptEx 例程會將指標寫入連接內容。
InterruptObject
IoConnectInterruptEx 例程寫入連接內容指標的 PKINTERRUPT 變數指標。
MessageServiceRoutine
為裝置中斷註冊為ISR的 InterruptMessageService 例程指標。
ServiceContext
指定要作為中斷之 InterruptMessageService 或 InterruptService 例程之 ServiceContext 參數傳遞的值。
SpinLock
微調鎖定的指標,做為中斷集的中斷微調鎖定,或 NULL。 如果 為 NULL,系統會配置微調鎖定作為中斷微調鎖定。 如果不是 NULL,您應該已使用 KeInitializeSpinLock 初始化微調鎖定。
SynchronizeIrql
指定執行ISR的最小裝置 IRQL (DIRQL) 。 如果系統大於一組中斷的最大 IRQL,則系統只會使用此值;否則,系統會使用最大 IRQL。 驅動程序幾乎一律會指定 SynchronizeIrql 的PASSIVE_LEVEL。
FloatingSave
指定當中斷發生時,系統是否儲存處理器的浮點狀態。 如果 為 TRUE,則系統會儲存浮點狀態。
FallBackServiceRoutine
用於行型中斷之 ISR 的 InterruptService 例程指標。 如果裝置沒有訊息訊號中斷,但有行型中斷,則系統會註冊此例程來處理行型中斷。
備註
IoConnectInterruptEx 例程採用單一 Parameters 參數,指向包含作業所有參數的IO_CONNECT_INTERRUPT_PARAMETERS結構。
規格需求
需求 | 值 |
---|---|
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |