[求助]关于通过TDI转发虚拟串口数据的问题
发表于:
2012-5-21 21:19
4975
最近由于工作需要,在开发一个 通过TDI转发虚拟串口数据的驱动,由于之前没接触过驱动,碰到一些问题不知道该怎么解决,希望得到各位大牛的指点,提前说声谢谢!
整个虚拟串口驱动的框架用的是DDK自带的例子,底层TDI相关部分学习的是codeproject上的一篇文章:Driver Development Part 5: Introduction to the Transport Device Interface
http://www.codeproject.com/Articles/9974/Driver-Development-Part-5-Introduction-to-the-Tran
在上层应用打开虚拟串口时利用TDI建立了TCP连接,写数据也已经成功,通过串口和网口抓包工具都可以监测到数据,网络另外的服务端也有数据返回,
可是上层应用利用ReadFile读取时没有数据。TDI的读写机制是借鉴上面那篇文章中的,开启一个内核线程来不断处理写请求,注册TDI_EVENT_RECEIVE的回调函数来进行数据读取,现在遇到的一个问题是利用一个名为sscom的串口调试工具来调试时,发送完数据后可以触发TDI_EVENT_RECEIVE,从而在该回调函数中可以读到数据,但是虚拟串口驱动的IRP_MJ_READ的派遣函数没有被调用,用一些工具也没有监测到IRP_MJ_READ的IRP;利用自己随便写的调试工具通过ReadFile调用来读取的时候可以进入到IRP_MJ_READ的派遣函数,但是TDI_EVENT_RECEIVE事件没有被触发,也就没有获取到数据。试着不通过注册事件而直接在IRP_MJ_READ的派遣函数中构造TDI_RECEIVE的irp来读取数据,在等待事件完成的时候卡死直至超时退出,没有获取到数据。
想咨询下各位朋友有没有碰到过类似情况,或者提供一些关于TDI相关的资料也好,谢谢大家!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课