阅读:1851回复:3
异步调用USB驱动,使用CancelIo后出现问题
我写了一个USB驱动, 对应的USB芯片是68013. 主要的代码是参考 <Programming Microsoft Windows Driver Model>里的代码.
我是通过Bulk方式与USB进行通信的,并在读写的派遣例程里使用了完成函数.上层应用是通过重叠IO的异步方式对设备进行读写. 我对设备的的读写基本没问题,不过,我发现一个奇怪的现象,当我取消一个处于Pending状态的读请求后(即使用CancelIo取消这个请求), 下次再次做读请求时,有时会收不到第一次发送过来的数据,而以后发送的数据则可以正常接收. 也就是说,如果我没有使用CancelIo,那么尽管我是用异步方式读取数据的,也不会丢失任何一次到达的数据.而如果使用了CancelIo,那么很可能在接下来的读取操作中,接收不到第一次到达的数据,只能接收以后到达的数据. 不知道各位大虾是否有好的建议,多谢指点! |
|
沙发#
发布于:2008-01-25 09:52
我帮你顶一下吧,我一直用同步的方式。不知道你是用DDK还是DRIVERSTUDIO开发驱动的?
|
|
|
板凳#
发布于:2008-01-25 11:22
会不会出现出现这样的情况,你请求获得多于512字节的数据,而实际上驱动只获得了512字节的数据,于是处于pending状态等待剩余的数据
此时你cancle了这个pending的IRP,于是已经收到的这512数据和pending的IRP一起没有了 于是你的数据不能在同步,即丢掉了一个包的数据,会出现这样的情况吗? 如果你得读写操作每次都是以512字节为最大单位,那这种情况是不会出现的 |
|
地板#
发布于:2008-01-26 09:46
在这里 http://www.usbing.net 看看,一定对你有帮助。
|
|