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,因为已针对该 CPU 计划了映射到此中断/处理器对的 DPC。

注解

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

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

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

要求

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

另请参阅

MiniportInterrupt

MiniportInterruptDPC

MiniportMessageInterrupt

MiniportMessageInterruptDPC

NdisMQueueDpc

NdisMRegisterInterruptEx