NDIS_POLL回调函数 (poll.h)

微型端口驱动程序实现 NdisPoll 回调函数,NDIS 将轮询接收指示并发送完成。

语法

NDIS_POLL NdisPoll;

void() NdisPoll(
  [_In_]    void *Context,
  [_Inout_] NDIS_POLL_DATA *PollData
)
{...}

参数

[_In_] Context

指向驱动程序在创建 Poll 对象时提供的上下文信息的指针。

[_Inout_] PollData

指向 NDIS_POLL_DATA 结构的指针,驱动程序应使用该结构来执行接收指示和发送完成。 它还包含有关需要指示的 NBR 数量的详细信息。

注解

微型端口驱动程序在微型端口适配器初始化期间注册 NdisPoll 回调。 驱动程序在调用 NdisRegisterPoll 之前,在 NDIS_POLL_CHARACTERISTICS 结构的 PollHandler 参数上指定 NdisPoll 函数的入口点。

当驱动程序调用 NdisRequestPoll 时,NDIS 将首先调用 NdisPoll 回调。 当驱动程序在接收指示或传输完成方面向前推进时,NDIS 将继续调用 NdisPoll

可以在 PASSIVE_LEVEL 和 DISPATCH_LEVEL IRQL 中调用 NdisPoll 回调。 驱动程序不应假设其级别为哪个级别。

驱动程序必须检查NDIS_POLL_DATA结构的接收传输参数,以获取它可以指示或完成的最大 NBR 数。

对于接收指示,驱动程序应:

  1. 提取最多可以指示的最大 Rx 数据包数。
  2. 初始化 NBR。
  3. 将它们添加到由位于NdisPollPollData 参数) NDIS_POLL_DATA结构中的 NDIS_POLL_RECEIVE_DATA 结构 (提供的 NBL 队列。
  4. 退出回调。

对于传输完成,驱动程序应:

  1. 提取最多可以完成的最大 Tx 数据包数。
  2. 完成 NBR。
  3. 将它们添加到 NDIS_POLL_TRANSMIT_DATA 结构提供的 NBL 队列, (位于 NdisPollPollData 参数 ) 的 NDIS_POLL_DATA 结构中。
  4. 退出回调。

在退出 NdisPoll 函数之前,驱动程序不应启用 Poll 对象的中断。 NDIS 将继续轮询驱动程序,直到它评估没有取得任何进展。 此时,NDIS 将停止轮询,并要求驱动程序通过调用 NdisSetPollNotification 回调来重新启用中断。

要求

要求
最低受支持的客户端 Windows 11
最低受支持的服务器 Windows Server 2022
标头 poll.h (包括 ndis.h)
IRQL <= DISPATCH_LEVEL

另请参阅

NdisSetPollNotification

NDIS_POLL_CHARACTERISTICS

NDIS_POLL_DATA

NDIS_POLL_RECEIVE_DATA

NdisRegisterPoll

NdisRequestPoll