MINIPORT_MESSAGE_INTERRUPT_DPC回调函数 (ndis.h)
如果驱动程序调用 NdisMRegisterInterruptEx 函数来注册中断,微型端口驱动程序必须提供 MiniportMessageInterruptDPC 处理程序。
语法
MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;
void MiniportMessageInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] ULONG MessageId,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
PVOID NdisReserved2 PULONG NdisReserved1,
[in] PULONG NdisReserved2
)
{...}
参数
[in] MiniportInterruptContext
中断上下文信息的块句柄。 微型端口驱动程序在 MiniportInterruptContext 参数中提供了此句柄,微型端口驱动程序传递给 NdisMRegisterInterruptEx 函数。
[in] MessageId
消息信号中断(MSI)消息标识符。 MessageId 是索引 IO_INTERRUPT_MESSAGE_INFO_ENTRY 结构 IO_INTERRUPT_MESSAGE_INFO 结构。 当驱动程序成功向 NdisMRegisterInterruptEx 函数注册 MSI 时,NDIS 将指针传递给 MessageInfoTable 成员中的关联 IO_INTERRUPT_MESSAGE_INFO 结构。
[in] MiniportDpcContext
指向微型端口驱动程序在调用 NdisMQueueDpcEx 或 NdisMQueueDpc 函数时提供的上下文区域的指针。 如果 NDIS 调用 MiniportMessageInterruptDPC,因为微型端口驱动程序在 TargetProcessors 参数中返回了位掩码 MiniportMessageInterrupt 函数,然后 MiniportDpcContextNULL。
[in] ReceiveThrottleParameters
指向 NDIS_RECEIVE_THROTTLE_PARAMETERS 结构指定微型端口驱动程序应在 DPC 中指示的最大 NET_BUFFER_LIST 结构数。
NdisReserved1
保留为 NDIS。
[in] NdisReserved2
保留为 NDIS。
返回值
没有
言论
向 NdisMRegisterInterruptEx 函数注册消息信号中断的微型端口驱动程序必须提供 MiniportMessageInterruptDPC 函数。
NDIS 调用 MiniportMessageInterruptDPC 以完成中断的延迟处理。 微型端口驱动程序可以调用 NdisMQueueDpcEx 或 NdisMQueueDpc 函数来请求其他处理器的其他延迟过程调用(DPC)。
微型端口驱动程序确定每个中断的源并采取适当的措施。 例如,如果中断指示传输作完成,微型端口驱动程序将完成挂起的发送请求。 如果中断的原因是链接状态的更改,微型端口驱动程序会指示 NDIS 的新链接状态。 如果有未完成的接收数据包,微型端口驱动程序会指示数据包到 NDIS。
支持 接收方缩放(RSS)的微型端口驱动程序,并启用了该功能,在 MiniportMessageInterruptDPC中检查其接收队列。 如果 NIC 提供此类功能,则 NIC 可能已根据哈希值在单独的队列上排队接收的数据包。 否则,微型端口驱动程序可以将数据包排序为 MiniportMessageInterruptDPC中的单独队列。
MiniportMessageInterruptDPC 调用 NdisMIndicateReceiveNetBufferLists 函数来指示当前处理器上的数据包。 MiniportMessageInterruptDPC 可以确定其他 CPU 所需的处理,并请求 NDIS 在未完成 DPC 的 CPU 上计划 DPC。
如果当前 DPC 在与
在 NDIS 调用 MiniportMessageInterruptDPC之前,NIC 上指定消息的中断通常已在 NIC 中禁用 MiniportMessageInterrupt 函数。 在返回控件之前,MiniportMessageInterruptDPC 可以重新启用中断。 如果微型端口驱动程序在禁用中断时将其他 DPC 排队,驱动程序应在执行最后一个 DPC 后启用中断。
微型端口驱动程序可以从其 MiniportInitializeEx 或 MiniportHaltEx 函数调用 NdisMDeregisterInterruptEx,以释放其分配 NdisMRegisterInterruptEx的资源。 NdisMDeregisterInterruptEx 返回后,NDIS 不会调用微型端口驱动程序的 MiniportMessageInterrupt 或 MiniportMessageInterruptDPC 函数。
NDIS 在 IRQL = DISPATCH_LEVEL 调用 MiniportMessageInterruptDPC。
示例
若要定义 MiniportMessageInterruptDPC 函数,必须首先提供一个函数声明,用于标识要定义的函数类型。 Windows 为驱动程序提供了一组函数类型。 使用函数类型声明函数有助于 驱动程序代码分析、静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。例如,若要定义名为“MyMessageInterruptDPC”的 MiniportMessageInterruptDPC 函数,请使用 MINIPORT_MESSAGE_INTERRUPT_DPC 类型,如以下代码示例所示:
MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;
然后,按如下所示实现函数:
_Use_decl_annotations_
VOID
MyMessageInterruptDPC(
NDIS_HANDLE MiniportInterruptContext,
ULONG MessageId,
PVOID MiniportDpcContext,
PVOID ReceiveThrottleParameters,
PVOID NdisReserved2
)
{...}
MINIPORT_MESSAGE_INTERRUPT_DPC 函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations 批注可确保使用应用于头文件中 MINIPORT_MESSAGE_INTERRUPT_DPC 函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数。
有关 Use_decl_annotations的信息,请参阅 批注函数行为。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
目标平台 | 窗户 |
标头 | ndis.h (包括 Ndis.h) |
IRQL | DISPATCH_LEVEL |