设为首页 收藏本站
查看: 865|回复: 0

浅浅研究了下WIN7 TDX 重定向的判断

[复制链接]

尚未签到

发表于 2015-5-20 08:12:12 | 显示全部楼层 |阅读模式
  前置知识:http://www.codemachine.com/article_tdi.html
  
DSC0000.png
  
  
  创建socket的过程从ring3到AFD,基本是老样子。
  在到达AfdCreate后,会有不同的分支
  根据RING3传下来的EA,里面不同的变量判断,就跳转不同的分支。
  1。默认分支
  默认里面会调用
  AfdCheckTDIFilter()
  该函数检测 tcp/udp/rawip/tcp6/udp6/rawip6这6个设备是否有attached的设备
  如果有则返回1,返回0的话,AfdCreate函数就接着调用AfdAllocateEndpoint创建ENDPOINT
  2。第二个分支
  上面AfdCheckTDIFilter函数返回1后,AfdCreate会返回一个错误码STATUS_MEDIA_CHANGED,回到应用层后,mssocket模块重新调用WsaSocket()创建socket。但这回EA不同,会跳转到第二个分支。
  这个分支里面就是直接调用AfdAllocateEndpoint创建ENDPOINT
  
  2个分支都调用了AfdAllocateEndpoint,那有什么不同?
  不同是在AfdAllocateEndpoint这个函数里面。
  AfdAllocateEndpoint函数有一个参数是传进TransportDeviceName的
  在第一个分支里面TransportDeviceName参数为空
  这样初始化_AFd_Endpoint结构的时候,就根据不同的情况初始化不同的字段值了。
  如TransportDeviceName为这空,说明是没有tdi过滤驱动attach的情况,这时候是直接afd到tcpip路线(尼玛的,性感路线)
  稍微看了下这里是怎么直接关联tcpip的。
  在TransportDeviceName为空情况下的初始化是直接把tcpip驱动提供的一些回调函数设置到afd_endpoint结构里面,以后就可以直接调用了。
  
  那这个回调函数怎么设置过来给afd驱动的呢?大致看了下,好像是
  
  afd驱动调用netio!NmrRegisterProvider的注册函数,把自己的一外链表头注册进去。
  估计是netio模块会tcpip的回调函数设置到这个链表里面(没空看了)
  afd!AfdAllocateEndpoint()函数创建endpoint的时候,调用AfdTlFindAndReferenceTransport根据socket的地址,协议等属性找到特定的数据来填充endpoint结构
  tcpip的回调函数所在的结构就是AfdTlFindAndReferenceTransport函数返回的。
  
  完。
  
  PS:上面提到afdcreate中判断变量是EA的 afd_open_packet->TransportDeviceNameLength
  
  AfdAllocateEndpoint中判断的名字来源就是afd_open_packet->TransportDeviceName;
  这个名字是device\udp这个格式
  
  另外发现有个强大的字段IgnoreTDI。大家自己搜索吧

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-68668-1-1.html 上篇帖子: 为win7系统增加按文件内容搜索的功能 下篇帖子: SVN与WIN7的冲突
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表