NDIS小端口驱动开发(三)

news2024/10/5 22:22:23

微型端口驱动程序处理来自过度驱动程序的发送请求,并发出接收指示。 在单个函数调用中,NDIS 微型端口驱动程序可以指示具有多个接收 NET_BUFFER_LIST 结构的链接列表。 微型端口驱动程序可以处理对每个NET_BUFFER_LIST结构上具有多个 NET_BUFFER 结构的多个NET_BUFFER_LIST结构列表的发送请求。

微型端口驱动程序必须管理接收缓冲池。 大多数微型端口驱动程序创建池,这些池使用每个NET_BUFFER_LIST结构预分配单个NET_BUFFER结构。

缓冲池管理

微型端口驱动程序通常从 MiniportInitializeEx 调用 NdisAllocateNetBufferListPool 来创建NET_BUFFER_LIST结构的池。 微型端口驱动程序使用这些结构来指示接收的数据。

通常,分配NET_BUFFER_LIST结构的微型端口驱动程序会在该NET_BUFFER_LIST结构上分配一个 NET_BUFFER 结构并将其排队。 在分配NET_BUFFER_LIST结构池时预分配NET_BUFFER结构比单独分配NET_BUFFER_LIST结构和NET_BUFFER结构更有效。

微型端口驱动程序可以调用 NdisAllocateNetBufferListPool 并将 AllocateNetBuffer 参数设置为 TRUE ,以指示 预分配NET_BUFFER 结构。 在这种情况下,NET_BUFFER结构预分配了驱动程序从池中分配的每个NET_BUFFER_LIST结构。 此类驱动程序必须调用 NdisAllocateNetBufferAndNetBufferList 才能从此池分配结构。

通常,微型端口驱动程序从 MiniportInitializeEx 调用 NdisAllocateNetBufferAndNetBufferList,以分配后续接收操作所需的任意数量的缓冲区。 在这种情况下,驱动程序管理可用缓冲区的内部列表。

MiniportReturnNetBufferLists 函数可以准备返回的 NET_BUFFER_LIST 结构,以便在后续接收指示中重复使用。 例如,尽管 MiniportReturnNetBufferLists 可以将NET_BUFFER_LIST结构返回到池 (,但它可以调用 NdisFreeNetBufferList) ,但重复使用结构而不将它们返回到池可能更有效。

当 NDIS 停止适配器时,微型端口驱动程序应释放所有NET_BUFFER_LIST结构和关联的数据。 驱动程序可以调用 NdisFreeNetBufferList 来释放结构,并调用 NdisFreeNetBufferListPool 函数来释放NET_BUFFER_LIST池。 

数据发送

这部分可以参考NDIS驱动开发-NET_BUFFER体系,下图演示了微型端口驱动程序发送操作:

NDIS 调用微型端口驱动程序的 MiniportSendNetBufferLists 函数来传输由 NET_BUFFER_LIST 结构链接列表描述的网络数据。

微型端口驱动程序调用 NdisMSendNetBufferListsComplete 函数,以将NET_BUFFER_LIST结构的链接列表返回到过度的驱动程序,并返回发送请求的最终状态。

取消发送

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

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

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

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

  • 遍历指定适配器的未完成发送请求列表,并调用 NDIS_GET_NET_BUFFER_LIST_CANCEL_ID 以获取每个NET_BUFFER_LIST结构的取消标识符。 微型端口驱动程序将NDIS_GET_NET_BUFFER_LIST_CANCEL_ID返回的取消 ID 与 NDIS 传递给 MiniportCancelSend 的取消 ID 进行比较;
  • 从其取消标识符与未完成发送请求列表中指定的取消标识符匹配的所有NET_BUFFER_LIST结构中删除;
  • 为所有已取消的NET_BUFFER_LIST结构调用 NdisMSendNetBufferListsComplete 函数以返回结构。微型端口驱动程序将NET_BUFFER_LIST结构的状态字段设置为NDIS_STATUS_SEND_ABORTED;
数据接收

 这部分可以参考NDIS驱动开发-NET_BUFFER体系 ,下图演示了微型端口驱动程序接收指示

微型端口驱动程序调用 NdisMIndicateReceiveNetBufferLists 函数来指示从网络接收数据。 NdisMIndicateReceiveNetBufferLists 函数将指示的NET_BUFFER_LIST结构列表传递到堆栈上方的驱动程序。

如果微型端口驱动程序在 NdisMIndicateReceiveNetBufferLists 的 ReceiveFlags 参数中设置NDIS_RECEIVE_FLAGS_RESOURCES标志,则表示微型端口驱动程序必须立即重新获得NET_BUFFER_LIST结构的所有权。 在这种情况下,NDIS 不调用微型端口驱动程序的 MiniportReturnNetBufferLists 函数来返回 NET_BUFFER_LIST 结构。 微型端口驱动程序在 NdisMIndicateReceiveNetBufferLists 返回后立即重新获得所有权。

如果微型端口驱动程序未在 NdisMIndicateReceiveNetBufferLists 的 ReceiveFlags 参数中设置NDIS_RECEIVE_FLAGS_RESOURCES标志,则 NDIS 会将指示NET_BUFFER_LIST结构返回到微型端口驱动程序的 MiniportReturnNetBufferLists 函数。 在这种情况下,微型端口驱动程序放弃所指示结构的所有权,直到 NDIS 将它们返回到 MiniportReturnNetBufferLists 为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1711920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树莓派部署harbor_arm64

文章目录 树莓派4b部署Harbor-arm64版本docker-compose维护命令访问harbor 192.168.1.111认用户名密码admin/Harbor12345 树莓派4b部署Harbor-arm64版本 harbor-arm版本 部署:参考 wget https://github.com/hzliangbin/harbor-arm64/releases/download/v1.9.3/ha…

NFS p.1 服务器的部署以及客户端与服务端的远程挂载

目录 介绍 应用 NFS的工作原理 NFS的使用 步骤 1、两台机子 2、安装 3、配置文件 4、实验 服务端 准备 启动服务: 客户端 准备 步骤 介绍 NFS(Network File System,网络文件系统)是一种古老的用于在UNIX/Linux主…

redis数据类型之string,list

华子目录 key操作说明SCAN cursor [MATCH pattern] [COUNT count]dump与restorekeys 通配符 示例演示 string说明setbit key offset valuegetbit key offsetsetrange key offset value List结构图相关命令lrem key count valueltrim key count value示例:使用 LTRIM…

Blazor入门-svg绘制-碰撞检测和图形坐标调整

上一篇: Blazor入门-简单svg绘制导出图像_blazor 画图-CSDN博客 https://blog.csdn.net/pxy7896/article/details/139003443 注意:本文只给出思路和框架,对于具体的计算细节,考虑到日后会写入软件著作权和专利文书,因…

被追着问UUID和自增ID做主键哪个好,为什么?

之前无意间看到群友讨论到用什么做主键比较好 其实 UUID 和自增主键 ID 是常用于数据库主键的两种方式,各自具有独特的优缺点。 UUID UUID 是一个由 128 位组成的唯一标识符,通常以字符串形式表示。它可以通过不同的算法生成,例如基于时间…

绝招曝光!3小时高效利用ChatGPT写出精彩论文

在这份指南中,我将深入解析如何利用ChatGPT 4.0的高级功能,指导整个学术研究和写作过程。从初步探索研究主题,到撰写结构严谨的学术论文,我将一步步展示如何在每个环节中有效运用ChatGPT。如果您还未使用PLUS版本,可以…

C++入门 ros自定义msg话题通信

一、 开发环境 ubuntu20.04 ros版本noetic 参考视频 https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p52&spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source4cd1b6f268e2a29a11bea5d2568836ee 二、 编写msg文件 在功能包下面创建msg文件夹…

【源码】6语言跨境电商PHP源码 精美UI+功能强大开源无授权

6语言跨境电商PHP源码 精美UI功能强大开源无授权 英文,简体中文,繁体中文,日语、泰语、越南语6语言。功能非常强大,UI也很漂亮的跨境电商源码。基于国外成熟电商系统二开的源码,带POS系统。 系统采用Laravel框架开发…

盘点好用的国产传输软件,看看哪个适合你

流动让数据释放价值,无论什么企业,什么行业,业务的正常开展均是以数据和文件的传输为基础,因此,对企业来说,文件传输工具是最基础但也是最举重若轻的。在琳琅满目的多种国产传输软件中,哪个是最…

【运筹学】前言:基础知识

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

CISCN --EzHeap

当时有点着急了,这题没写出来,结束后在ctfshow上做了一下。 使用的方法是environ泄露栈地址,然后在栈上构造orw的rop链。 以下是过程: 只能orw。 堆体开沙盒模式会在heap和bin一开始构造很多垃圾堆。所以分配和free的时候要注意…

1806 jsp防疫物资销售管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 防疫物资销售管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.…

Ps:消失点滤镜 - 透视平面和网格

Ps菜单:滤镜/消失点 Filter/Vanishing Point 快捷键:Ctrl Alt V “消失点”滤镜中的透视平面 Plane和网格 Grid用于在编辑图像时保持正确的透视效果。 只有定义了与图像透视对齐的矩形平面,才能在消失点中进行编辑。平面的精确度确定了能否…

[自动驾驶技术]-5 Tesla自动驾驶方案之算法(AI Day 2021)

有朋友问我,如何有效学习一个新技术。笔者这么多年的经验是:1)了解国内外产业应用和标准法规现状,先建立宏观知识图谱及技术系统框架;2)根据系统框架逐块进行深入研究(横向、纵向)&a…

【LLM第7篇】transformer跟bert、gpt、大模型的联系

上一篇讲了transformer的原理,接下来,看看它的衍生物们。 Transformer基本架构 Transformer模型主要由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器负责处理输入序列,将其…

正邦科技(day2)

自动校准 问题:电量不准都可以直接去校准 校准方式:可程式变频电压 问题分析:他是通过软件去自动自动校准的,flash 清空的时候有缓存没有清空,或者互感器没有读取到问题 互感器:电流互感器的作用包括电流测…

2024年5月份架构师考试真题完整版

截至2024-5-28 19:24:14已全部收录完成 共75到选择题,5道案例题,4道论文题。题目顺序不分先后。 全网最全的2024年5月份架构师考试真题回忆版,包含答案和解析。 群友 疯狂程序员 花落无声 半夏 鲁迅-三战老兵(预备役) 本次必成 锦鲤附体 2024…

LabVIEW车轮动平衡检测系统

LabVIEW车轮动平衡检测系统 随着汽车行业的快速发展,车轮动平衡问题对乘坐舒适性、操控稳定性及安全性的影响日益凸显,成为了提高汽车性能的一个关键环节。传统的检测系统因精度低、成本高、操作复杂等问题,难以满足现代汽车行业的需求。开发…

100个 Unity小游戏系列四 -Unity 抽奖游戏专题二 水果机游戏

一、演示效果 二、知识点 2.1 布局 private void CreateItems(){for (int i 0; i < rewardDatas.Length; i){var reward_data rewardDatas[i];GameObject fruitOjb;if (i < itemRoot.childCount){fruitOjb itemRoot.GetChild(i).gameObject;}else{fruitOjb Instant…

C++数据结构之:链List

摘要&#xff1a; it人员无论是使用哪种高级语言开发东东&#xff0c;想要更高效有层次的开发程序的话都躲不开三件套&#xff1a;数据结构&#xff0c;算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合&#xff0c;即带“结构”的数据元素的集合&am…