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 在 CM_PARTIAL_RESOURCE_DESCRIPTOR 的 u.Interrupt.Level 成员的 CmResourceTypeInterrupt 资源中传递。 否则, 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开始,驱动程序可以通过将 Irql 和 SynchronizeIrql 设置为 PASSIVE_LEVEL并将 SpinLock 设置为 NULL 来注册在被动级别运行的 ISR。 有关详细信息,请参阅 使用 Passive-Level 中断服务例程。
InterruptMode
指定一个 KINTERRUPT_MODE ,用于确定中断是 (InterruptMode = LevelSensitive) 还是边缘触发 (InterruptMode = 闩锁) 。 对于 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,则使用组成员。 如果版本设置为 CONNECT_FULLY_SPECIFIED,则忽略组成员,在这种情况下,用于传递中断的组编号始终为 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.) 从 Windows 8 开始,分配给设备的一组基于行的中断资源可以共享在 IRQL = PASSIVE_LEVEL 运行的 ISR 时,驱动程序才应指定除 PASSIVE_LEVEL 以外的值。 如果 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变量。
泛型
指向 PVOID 变量的指针, IoConnectInterruptEx 例程将指针写入到连接上下文。
InterruptMessageTable
指向PIO_INTERRUPT_MESSAGE_INFO变量的指针, IoConnectInterruptEx 例程将指针写入到连接上下文。
InterruptObject
指向 PKINTERRUPT 变量的指针, IoConnectInterruptEx 例程将指针写入到连接上下文。
MessageServiceRoutine
指向用于注册为设备中断的 ISR 的 InterruptMessageService 例程的指针。
ServiceContext
指定要作为中断的 InterruptMessageService 或 InterruptService 例程的 ServiceContext 参数传递的值。
SpinLock
指向作为中断集的中断旋转锁的指针,或 NULL。 如果 为 NULL,则系统会分配一个旋转锁作为中断旋转锁。 如果不是 NULL,则应已使用 KeInitializeSpinLock 初始化了旋转锁。
SynchronizeIrql
指定运行 ISR 的最小设备 IRQL (DIRQL) 。 仅当此值大于中断集的最大 IRQL 时,系统才使用此值;否则,系统会使用最大 IRQL。 驱动程序几乎总是为 SynchronizeIrql 指定PASSIVE_LEVEL。
FloatingSave
指定发生中断时系统是否保存处理器的浮点状态。 如果 为 TRUE,则系统保存浮点状态。
FallBackServiceRoutine
指向 InterruptService 例程的指针,用作基于行的中断的 ISR。 如果设备没有消息信号中断,但具有基于线路的中断,系统会注册此例程来处理基于线路的中断。
注解
IoConnectInterruptEx 例程采用单个 Parameters 参数,该参数指向包含操作所有参数的IO_CONNECT_INTERRUPT_PARAMETERS结构。
要求
要求 | 值 |
---|---|
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |