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_DESCRIPTORu.Interrupt.Level 成员的 CmResourceTypeInterrupt 资源中传递。 否则, IrqlSynchronizeIrql 值相同。

FloatingSave

指定发生中断时系统是否保存处理器的浮点状态。 如果 为 TRUE,则系统会保存浮点状态。

ShareVector

指定中断向量是否可共享。 基于行的 PCI 中断必须是可共享的。 对于消息信号 PCI 中断,驱动程序编写器可以选择其中断是否可共享,但应选择默认使其可共享。

向量

指定在 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Vector 成员的 CmResourceTypeInterrupt 资源中传递的中断向量。

Irql

指定在 CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Level 成员的 CmResourceTypeInterrupt 资源中传递的 DIRQL。 从Windows 8开始,驱动程序可以通过将 IrqlSynchronizeIrql 设置为 PASSIVE_LEVEL并将 SpinLock 设置为 NULL 来注册在被动级别运行的 ISR。 有关详细信息,请参阅 使用 Passive-Level 中断服务例程

InterruptMode

指定一个 KINTERRUPT_MODE ,用于确定中断是 (InterruptMode = LevelSensitive) 还是边缘触发 (InterruptMode = 闩锁) 。 对于 PCI 总线中的共享中断线,请指定 LevelSensitive。 对于 PCI 消息信号中断,请指定 “闩锁”。

ProcessorEnableMask

指定 KAFFINITY 掩码,该掩码表示设备中断可能发生的处理器集。 此值在 CM_PARTIAL_RESOURCE_DESCRIPTORu.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.InterruptObjectConnectionContext.InterruptMessageTable 将位置分别视为 PKINTERRUPT 或PIO_INTERRUPT_MESSAGE_INFO变量。

泛型

指向 PVOID 变量的指针, IoConnectInterruptEx 例程将指针写入到连接上下文。

InterruptMessageTable

指向PIO_INTERRUPT_MESSAGE_INFO变量的指针, IoConnectInterruptEx 例程将指针写入到连接上下文。

InterruptObject

指向 PKINTERRUPT 变量的指针, IoConnectInterruptEx 例程将指针写入到连接上下文。

MessageServiceRoutine

指向用于注册为设备中断的 ISR 的 InterruptMessageService 例程的指针。

ServiceContext

指定要作为中断的 InterruptMessageServiceInterruptService 例程的 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)

另请参阅

IoConnectInterruptEx