阅读:1222回复:5
各位高手,困惑小弟已久的???晴伸出援就之手,先谢了
兄弟在开发一USB驱动,2000系统,DS开发。想实现异步读写,现在想在没有数据时读操作能返回应用程序,超时Cancel相应的irp,在进行其他操作。执行一边应用程序,可以正常退出。执行第二边应用程序,退出时死机。error为PROCESSED_HAS_LOCKED_PAGES. 且执行一边应用程序后,也无法正常关机。关机时死机,error为MULTIPLE_IRP_COMPLETE_REQUESTS。用softice跟踪调试,发现cancel程序并未调用,且第二次执行应用程序时,第一次应用程序中的irp地址还在队列中,确实没有cancel掉。我是已经设了I.SetCancelRoutine(LinkTo(Cancel));也pending了irp,为何没有进入cancel例程呢。难道还要做什么其他处理?
附件为程序代码。 哪位老大能帮忙解决我请他暴搓一顿(限北京,最好是美女,hiahia)。 |
|
|
沙发#
发布于:2004-03-30 11:38
请问解决了吗?我也正为这问题发愁
|
|
板凳#
发布于:2004-03-16 17:15
这个问题我问了技术支持,他并没说明白,并且我觉得老外不一定懂,每次都说的糊里糊涂,加上时差,等都等不起。一位微软的同志说ds本身就有很多问题,不过我觉得这种问题不像是ds本身的问题引起的。各位老兄那位清楚请告诉我一下,先谢了。
|
|
地板#
发布于:2004-03-15 11:39
zmwk,DS是3.0版本,是Bulk传输。我觉得奇怪的是,当我在应用程序中调用CancleIO后,在driver中收到的IRP已经设为被cancel了(WasCancled 为Ture).而且此时WasPending也为Ture.这样它就不会进到我的Cancel的处理routine中了,也就没有被Cancle掉。
|
|
地下室#
发布于:2004-03-12 21:22
DS是2.6吗?
Bulk传输? |
|
|
5楼#
发布于:2004-03-12 14:35
各位老大,是没人清楚还是没人理,郁闷。
|
|