阅读:1224回复:5
急问:IRP等待问题?
小弟在开发USB2.0驱动和应用程序,遇到一个问题:
采用Bulk传输模式由PC向设备传输数据,由于所传文件较大(几G),传输速率较高(30Mbyte/s),所以在内存中开辟两个buffer,由应用程序触发驱动,然后驱动在内核模式下传输数据。而应用程序每隔1ms检查buffer一次,如果在传第一个buffer的数据,那么应用程序就更新第二个buffer的数据。这样循环直到文件传完。驱动在内核模式下传输数据是利用两个IRP交替传输数据(使用IoAllocateIrp和IoSetCompletionRoutine)。问题是:由于数据传输速度太快,第一个buffer的数据传完了,要传第二个buffer的时候,第二个buffer的数据还未更新完,造成传输数据重复。我是想如果要传buffer的数据还未更新好时,让IRP等在那,但不知如何等。用过Kewaitsingleobject函数,但是softice老是报告使用不对,然后就死机了。还请那位高手执教一下。谢谢!!! |
|
沙发#
发布于:2003-07-18 08:56
在二个buffer中加上标记字符。以表示数据是否准备好。
不过这是个笨办法。 |
|
板凳#
发布于:2003-07-18 09:24
小弟在开发USB2.0驱动和应用程序,遇到一个问题: 你是在完成例程里面kewait么?报的错是switch_DPC吧。 |
|
|
地板#
发布于:2003-07-18 09:59
你干吗非要开两个buffer呢,你开10个不行吗?
你把那两个buffer的总数数量不变,但是分成10块,然有循环进行,这样就应该不会出现你那个问题了,如果10个不够就开成20个呗。 |
|
地下室#
发布于:2003-07-20 00:46
[quote]小弟在开发USB2.0驱动和应用程序,遇到一个问题: 你是在完成例程里面kewait么?报的错是switch_DPC吧。 [/quote] 好像是的!如何让IRP等下来那? |
|
5楼#
发布于:2004-09-09 10:18
兄弟,我请教你一问题,你是如何实现BULK传输的,IOALLOCIRP,建立线程一直在监测irp的状态吗,能否列出一段代码让兄弟看看
|
|
|