一个usb的驱动,使用异步通信方式,应用中用readfile()来进行读,但是读取数据的长度是随便指定的。我在驱动的dispathread历程中构造很多个irp(携带urb)发送给usb下层驱动,现在我要在从设备读完所有数据后取消没有结束的irp。是不是可以为irp_mj_rea...
全文
回复(3) 2004-12-01 20:56 来自版块 - 内核编程
表情
Shentu只有你自己发出的Irp才可以用IoCancelIrp来取消之,详细说明参考DDK。 在应用里不可能指定固定长度的,因为这个通用驱动要支持那么多的串口软件。(2004-12-02 23:01)
xiaorain谢谢您的关心:). 显式是指 irp_mj_read这个irp是不是要我在调用了IocancelIrp()后才能进入它的取消历程?还是系统会自动调用呢? 您在应用中指定了要读取得数据的确切长度了吗〉?而不是随便指定一个数值,如1024? 现在就是因为应用中没有指定正确的长...(2004-12-02 09:32)
Shentu1、有个办法可以解决这种取消问题。把你的要发给下层驱动的irps放进一个队列里,然后在每个irp的完成例程里管理这个队列,在取消IRP_MJ_READ的IRP的时候,把这个队列里的正在等待的IRP给cancel掉,其他的就直接删除就可以了,因为同一时间其实只能有一个IRP在pen...(2004-12-01 21:50)

返回顶部