HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE回调函数 (storport.h)

HwMSInterruptRoutine 例程处理消息信号中断(MSI)。

语法

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;

BOOLEAN HwMessageSignaledInterruptRoutine(
  IN PVOID HwDeviceExtension,
  IN ULONG MessageId
)
{...}

参数

HwDeviceExtension

指向主机总线适配器(HBA)的硬件设备扩展的指针。

MessageId

消息的标识符。

返回值

HwMSInterruptRoutine 如果确定 HBA 生成 MSI,则返回 TRUE。 如果 HBA 未生成 MSI,HwMSInterruptRoutine 返回 FALSE

言论

微型端口驱动程序的 HwMSInterruptRoutine 例程处理 HBA 生成的信号中断(MSIs)的消息。 微型端口驱动程序指示其 HBA 通过将 HwMSInterruptRoutinePORT_CONFIGURATION_INFORMATION 成员设置为指向 HwMSInterruptRoutine 例程来生成 MSI。 如果 HBA 不生成 MSI,则微型端口驱动程序应将 HwMSInterruptRoutine 设置为 NULL

如果 PORT_CONFIGURATION_INFORMATION 结构的 InterruptSynchronizationMode 成员设置为 InterruptSynchronizeAll,则 Storport 驱动程序会将源自其管理的适配器或连接到适配器的设备同步所有 MSIs。 发生中断时,Storport 驱动程序会在获取中断旋转锁后调用微型端口驱动程序的 HwMSInterruptRoutine 例程。

如果将 PORT_CONFIGURATION_INFORMATION 结构的 InterruptSynchronizationMode 成员设置为 InterruptSynchronizePerMessage,Storport 驱动程序会在 IRQL = DIRQL 处调用微型端口驱动程序的 HwMSInterruptRoutine 例程, 保存与 MessageID 参数中指示的消息标识符(ID)对应的中断旋转锁。 HBA 可以中断 HwMSInterruptRoutine 例程,以便其他消息 ID 中断,因此 Storport 驱动程序可能会对 HwMSInterruptRoutine进行嵌套调用,或者在不同的处理器上同时运行 HwMSInterruptRoutine 的不同实例。 若要通过 HwMSInterruptRoutine的不同实例同步对敏感数据的访问,微型端口必须调用 StorPortAcquireMSISpinLock,并 StorPortReleaseMSISpinLock 例程来获取和释放除 MessageIDID 以外的消息 ID 的旋转锁。

微型端口驱动程序可以通过调用 StorPortGetMSIInfo 例程来检索有关消息的其他信息。

它不应从 HwMSInterruptRoutine 例程内部调用 StorPortGetMSIInfo 例程。

HwMSInterruptRoutine 的名称只是占位符。 此例程的实际原型在 Storport.h 中定义,如下所示:

typedef
BOOLEAN
  HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE (
    _In_ PVOID  HwDeviceExtension,
    _In_ ULONG  MessageId
    );

例子

若要定义 HwMSInterruptRoutine 回调函数,必须先提供一个函数声明来标识要定义的回调函数的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义 HwMSInterruptRoutine名为 MyHwMSIRoutine的回调例程,请使用 HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE 类型,如以下代码示例所示:

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
BOOLEAN
MyHwMSIRoutine (
  _In_ PVOID  DeviceExtension,
  _In_ ULONG  MessageId
  );
  {
      ...
  }

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE 函数类型在 Storport.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations 批注可确保使用应用于头文件中 HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE 函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 Storport 驱动程序的函数角色类型声明函数。 有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

要求 价值
目标平台 普遍
标头 storport.h (包括 Storport.h)
IRQL DIRQL

另请参阅

PORT_CONFIGURATION_INFORMATION

StorPortAcquireMSISpinLock

StorPortGetMSIInfo

StorPortReleaseMSISpinLock