NET_BUFFER 用来描述一个数据包

NET_BUFFER_LIST 用来描述共享元数据(OOB带外数据)的多个数据包

NET_BUFFER_LIST 可以是一个链表,即多个NBL连接在一起

NET_BUFFER 由多个MDL连接在一起构成,为什么这样设计的,通常构造一个数据包的方法是自下而上,就是先构造包体,再构造包头,包头,包头……

由于是这样一个自下而上的过程,就有了 Retreat Advance 两个动作,详解请参考

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/net-buffer-list-structure

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/net-buffer-structure

WFP callout每种回调场景的offset都不一样,参考资料

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/data-offset-positions

关于收发包NBL和NB的相关资料

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/indicating-received-ethernet-frames

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/sending-ethernet-frames

关于WFP callout包的资料

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/packet-indication-format

简单总结下来基本就是

1.WFP callout 除了STREAM path和FORWARD path,只会在回调中给一个NBL,而不是NBL chain。

2.如果NBL中有多个NB,那么这些NB具有完全相同的2、3层地址。

不得不说自从微软收购了github并将其应用在自己的msdn之后,微软的文档友好多了。而且微软还有专门的职位叫"内容开发者",就专职写文档的。以前想写个WFP贼费劲,啥啥没有全靠猜,现在每个场景每个API文档非常清晰。

另外关于MDL是否可以修改的问题,搜索了一些内容

https://community.osr.com/discussion/284088/netbufferlist-chain-using-same-mdl

https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/a63fef1c-c7e6-451d-adc5-16de1e8c0b62/ndis-51-intermediate-driver-for-packet-encryptiondecryption-not-working-with-httpsys?forum=wdk

OSR中的以为NDIS架构师大神说在内核里都是假设MDL是可写的,完全无视NBL中只读标志。

然而第二个msdn论坛的有人反馈http.sys在作出错误回应时会使用只读内存。

我之前给别人做NDIS驱动时就遇到这个问题,当时是在服务器上部署NDISFilter总是过一段时间莫名其妙出现写Readonly故障,当时是Rebuild解决的,今天终于明白了,原来是这么回事。

NDIS6缓冲相关实验和经验相关推荐

  1. 小功率电子镇流荧光灯相关实验

    ➤01 小型电子荧光灯 在博文 小功率荧光灯拆解分析 中对于一款电子镇流器激励的小型荧光灯进行了相关实验.现在手边有一颗荧光灯,基于该荧光灯初步进行相关的电子实验. ▲ 已经拆开的荧光灯泡 荧光灯的主 ...

  2. 计算机相关专业学习经验总结

    计算机相关专业学习经验总结 无论学习计算机哪一个方向,完完全全可以在网络上找到相关, 你需要的完整的学习路线以及每一个学习步骤阶段 需要找到的东西和学习资料 勤自学.勤思考.勤搜索

  3. tomcat相关实验

    tomcat相关实验 1.实现LNT 同主机实现 1.安装并启动tomcat 1)OpenJDK的安装yum install java-1.8.0-openjdk-devel.x86_64 确定JDK ...

  4. 秋水仙碱与牛血清白蛋白 (BSA)偶联物(相关实验)

    秋水仙碱与牛血清白蛋白 (BSA)偶联物(相关实验) 提供牛血清白蛋白BSA.鸡卵清白蛋白OVA.人血清蛋白HSA等蛋白偶联芍药苷.氟伐他汀.阿西美辛.利凡诺.氟尼辛.氨丙啉.卡托普利.阿米舒必利.金 ...

  5. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

  6. STM32学习心得十八:通用定时器基本原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容: 1) 三种定时器分类及区别: 2) 通用定时器特点: 3) 通用定时器工作过程: 4) 实验一:定时器中断实验补充知识及部代码解读: 6) 实验二:定时器PWM输 ...

  7. 关于partnerLinkType的相关实验

    文章仅供大家参考,所有评论, 错误报告, 其他信息以及批评, 请邮寄到 Jeffery.Lee AT gmail.com 或者访问我的个人blog同我交流( http://ibuddie.spaces ...

  8. 【评测】iPS细胞相关实验服务机构-魔法师的仓库

    由血液细胞重编程得到iPS细胞是一个经典实验,但由于实验周期长.涉及实验方法多.实验繁琐,对于没有受到过系统培训的人员,还是有一定难度的.现在,您可以选择我们的iPS细胞相关实验服务,节省您宝贵的时间 ...

  9. 计算机硬件检测标准模板,计算机硬件性能检测相关实验模板.doc

    文档介绍: 计算机硬件性能检测相关实验<计算机硬件性能检测>实验指导书实验目的:1.熟练掌握通过测试软件在不拆机情况下了解计算机硬件参数信息及性能检测方法;2.掌握常用CPU.内存.显卡. ...

最新文章

  1. 反流技术之IE插件技术研究
  2. 用Tableau画瓷砖地图
  3. 如何自学Android--转
  4. 使用Redis Stream来做消息队列和在Asp.Net Core中的实现
  5. 执行truffle unbox react报错,出现Error: connect ECONNREFUSED 0.0.0.0:443问题的解决办法
  6. 腾讯计划对斗鱼进行私有化?斗鱼盘前涨超10%
  7. [转]ExtJs中使用中碰到的三个问题的解决方法
  8. ArcGIS学习总结(11)——创建点要素并计算对应经纬度
  9. 用友nc java下载_用友nc的java插件下载
  10. maven下载安装配置3.5.2
  11. win10锁屏账户和计算机名,如何玩转Win10锁屏和主题
  12. welearn考试切屏会有显示吗_welearn答案在哪里可以看?公众号、app或者微信小程序?...
  13. Windows10的右键菜单添加“管理员取得所有权”
  14. ndows10cad安装不上,windows10系统无法安装CAD2008的解决方案
  15. 千秋华夏 壮丽河山 国庆节快乐~
  16. PPPoE获取到32位掩码的研究
  17. python安装卸载及查看python版本/第三方包版本
  18. 用友T3软件超值的打印秘籍,你值得收藏!
  19. C++生成dll及dll的调用
  20. 因果AI如何发现因果

热门文章

  1. 集合上二元关系性质判定的实现(python实现)
  2. java游戏最终boss烛龙_游戏中劝退玩家的变态小怪!神装扛不住它一击,难度秒杀最终BOSS?...
  3. alphac测试和bata测试区别_电缆识别仪与电缆故障测试仪的区别
  4. 如何保证战略落地_战略如何规划落地?值得借鉴
  5. mysql数据库元表_mysql中元数据库information_schema学习之TABLES表
  6. cli2弃用了吗 vue_vue-cli 3 和 vue-cli 2的区别
  7. 介绍一个非常好用的Python模块-pprint模块,相信你一定会爱上它的
  8. Python正则表达式-常用函数的基本使用
  9. 案例详解Python变量的作用域是怎么使用的,面试必学
  10. rediscluster全局数据_redis迁移,从redis cluster集群迁移数据到另外一个redis cluster集群...