在微型端口驱动程序中取消发送请求

下图演示了微型端口驱动程序取消发送操作。

说明微型端口驱动程序取消发送操作的示意图。

协议、筛选器和中间驱动程序可以调用 NdisCancelSendNetBufferLists 来取消未完成的发送请求。 在发出发送请求之前,这些过度的驱动程序必须使用取消 ID 标记发送数据。

NDIS 调用微型端口驱动程序的 MiniportCancelSend 函数来取消所有标有指定取消标识符的 NET_BUFFER_LIST 结构的传输。

微型端口驱动程序的 MiniportCancelSend 函数执行以下操作:

  1. 遍历指定适配器的未完成发送请求列表,并调用 NDIS_GET_NET_BUFFER_LIST_CANCEL_ID 以获取每个NET_BUFFER_LIST结构的取消标识符。 微型端口驱动程序将NDIS_GET_NET_BUFFER_LIST_CANCEL_ID返回的取消 ID 与 NDIS 传递给 MiniportCancelSend 的取消 ID 进行比较。

  2. 从其取消标识符与未完成发送请求列表中指定的取消标识符匹配的所有NET_BUFFER_LIST结构中删除。

  3. 为所有已取消的NET_BUFFER_LIST结构调用 NdisMSendNetBufferListsComplete 函数以返回结构。微型端口驱动程序将NET_BUFFER_LIST结构的状态字段设置为NDIS_STATUS_SEND_ABORTED。