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 结构的指针。 它还包含有关需要指示的 NBL 数量的详细信息。

言论

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

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

可以在 PASSIVE_LEVEL 和 DISPATCH_LEVEL IRQL 上调用 NdisPoll 回调。 驱动程序不应假设它将达到哪个级别。

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

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

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

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

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

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

要求

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

另请参阅

NdisSetPollNotification

NDIS_POLL_CHARACTERISTICS

NDIS_POLL_DATA

NDIS_POLL_RECEIVE_DATA

NdisRegisterPoll

NdisRequestPoll