NdisMQueueDpcEx 函数 (ndis.h)

NDIS 微型端口驱动程序调用 NdisMQueueDpcEx 函数来计划 CPU 上的 DPC 调用。

语法

KAFFINITY NdisMQueueDpcEx(
  [in] IN NDIS_HANDLE     NdisInterruptHandle,
  [in] IN ULONG           MessageId,
  [in] IN PGROUP_AFFINITY TargetProcessors,
  [in] IN PVOID           MiniportDpcContext
);

参数

[in] NdisInterruptHandle

在上一次调用中获取的微型端口驱动程序的中断句柄 NdisMRegisterInterruptEx 函数。

[in] MessageId

DPC 的 MSI 消息 ID。 如果 DPC 用于基于行的中断,则不使用此参数,应将其设置为零。 否则,MessageId 是索引 IO_INTERRUPT_MESSAGE_INFO_ENTRY 结构 IO_INTERRUPT_MESSAGE_INFO 结构。 当驱动程序成功向 NdisMRegisterInterruptEx 函数注册 MSI 时,NDIS 会在 MessageInfoTable 成员处传递指向关联IO_INTERRUPT_MESSAGE_INFO结构的指针。

[in] TargetProcessors

指示目标处理器的位图。 NDIS 应为位图中指示的每个目标处理器计划 DPC。 TargetProcessors 中的每个位 标识 CPU。 如果调用方设置位 0,NDIS 将为 CPU 0 计划 DPC。 如果调用方设置位 1,NDIS 将为 CPU 1 计划 DPC,依此安排。

[in] MiniportDpcContext

指向调用方指定的上下文区域的指针。 NDIS 将此指针传递给 MiniportInterruptDPC参数的 MiniportDpcContext 和 MiniportMessageInterruptDPC 函数。

返回值

NdisMQueueDpcEx 返回指示目标处理器的位图。 返回值中的每个位标识 CPU。

NDIS 已成功为位图中设置的每个目标处理器计划 DPC。 如果 NDIS 设置位 0,则 NDIS 为 CPU 0 计划 DPC。 如果 NDIS 设置位 1,则 NDIS 会为 CPU 1 计划 DPC,依此等。

如果驱动程序为 CPU 请求了 DPC,并且 NDIS 指示它未计划该 DPC,则不会计划 DPC,因为映射到此中断/处理器对的 DPC 已针对该 CPU 计划。

言论

NDIS 6.20 及更高版本的微型端口驱动程序调用 NdisMQueueDpcEx,以请求其他处理器的 DPC 调用。 NDIS 调用 MiniportInterruptDPC MiniportMessageInterruptDPC 函数来完成中断的延迟处理。

NdisMQueueDpcExNdisMQueueDpc 函数相同,但 TargetProcessors 参数具有KGROUP_AFFINITY类型。 因此,NdisMQueueDpcEx 可以在任何处理器组中的处理器上计划 DPC。 若要在多个处理器组中计划 DPC,可以使用多个调用来 NdisMQueueDpcEx

注释NdisMQueueDpcMiniportInterrupt MiniportMessageInterrupt 函数具有 TargetProcessors 参数(ULONG)。 此参数指定处理器组 0 中的前 32 个处理器。
 
重要 NDIS 6.20 及更高版本的驱动程序应始终使用 NdisMQueueDpcEx 来计划 DPC。
 

要求

要求 价值
最低支持的客户端 NDIS 6.20 及更高版本中受支持。
目标平台 普遍
标头 ndis.h (包括 Ndis.h)
Ndis.lib
IRQL 任何级别

另请参阅

MiniportInterrupt

MiniportInterruptDPC

MiniportMessageInterrupt

MiniportMessageInterruptDPC

NdisMQueueDpc

NdisMRegisterInterruptEx