处理 MSI 中断

当网络接口卡 (NIC) 生成中断时,NDIS 调用 MiniportMessageInterrupt 函数。 此函数中的 MessageId 参数标识 MSI-X 消息。

MiniportMessageInterrupt 在处理中断后应始终返回 TRUE ,因为消息中断不共享。

微型端口驱动程序应在其 MiniportMessageInterrupt 函数中尽可能少地执行工作。 驱动程序应将 I/O 操作延迟到 MiniportMessageInterruptDpc 函数,NDIS 调用该函数来完成中断的延迟处理。

若要在 MiniportMessageInterrupt 返回后将其他延迟的过程调用 (DPC) 排队,微型端口驱动程序设置 MiniportMessageInterrupt 函数的 TargetProcessors 参数的位。 若要从 MiniportMessageInterruptMiniportMessageInterruptDPC 请求其他 DPC,微型端口驱动程序可以调用 NdisMQueueDpc 函数。

微型端口驱动程序可以调用 NdisMQueueDpc 来请求其他处理器的其他 DPC。

NDIS 6.1 及更高版本保证为同一 CPU 计划的不同消息的 DPC 单独排队。 例如,如果微型端口驱动程序在 CPU 1 上同时计划两个 DPC, (一个 DPC 用于消息 0,另一个 DPC 用于消息 1) ,则两个 DPC 将排队等待 CPU 1 (一个消息为 0 的 DPC,另一个 DPC 与消息 1) 。

NDIS 还保证针对不同 CPU 上计划的同一消息的 DPC 单独排队。 例如,如果微型端口驱动程序计划两个 DPC (CPU 0 上的一个 DPC 用于消息 0,一个 DPC 在 CPU 1 上计划消息 0) ,则两个单独的 DPC 在 CPU 0 和 CPU 1 上排队,这两个 DPC 都用于消息 0。