阅读:800回复:4
请大手过来看看
我的问题:
驱动之间调用的问题,已经好久没有解决了,有益的过来帮忙. 我的程序流程应用层发命令,中间级的驱动受到命令后,重新生成 新的IRP命令请求发送到另外一个驱动. 我采用了KLowerDevice类实现,目前要命的问题是当我从应用层测试时候,如果Ctrl-C后,在win98下出现死机. 根据我的跟踪看,在应用层Ctrl-c后,底层的驱动执行Close的IRP了,可是中间级驱动生成的IRP还没有释放,这样是不是死机的原因呢? 欢迎大手给我指点迷津,欢迎有类似的情况的同志和我讨论. |
|
|
沙发#
发布于:2002-11-02 17:23
应该不是,资源不释放,不会立即死机。
|
|
板凳#
发布于:2002-11-03 11:52
fracker,高手
我碰到的现象是出现蓝屏,程序不能运行. 能说的详细点码? 说说导致系统死机的原因.谢谢 |
|
|
地板#
发布于:2002-11-03 13:18
我没明白你的意思,我没用过DS写程序,不清楚KLowerDevice是个什么概念,你表述的清楚些好吗?
|
|
地下室#
发布于:2002-11-04 11:33
这么说吧,我有驱动程序A和驱动程序B,两个驱动在初始化上没有关系,驱动程序A通过分配自己的IRP调用驱动程序B, 流程顺序是应用层-->A-->B-->A-->应用层.驱动程序A在调用B的时候需要等待几秒钟, 目前程序测试运行很好,可是有一个问题,如果在测试期间Ctrl-C,怎会出现问题. 以下我选取有问题的代码: 1) I.SetCompletionRoutine( SynchCallCompletionRoutine, &Ctx, TRUE, TRUE, TRUE ); // Call the lower device 2) IoCallDriver(m_pDeviceObject, I.m_Irp); // Wait for completion 3) e.Wait(); // extract information from context structure 4) if (pInformation) *pInformation = Ctx.m_Information; BOUNDS_CHECKER(COMPLETED_CALLDOWN, (this, Ctx.m_Status, Ctx.m_Information)); return Ctx.m_Status; 在4)设置断点,正常情况下在3)的语句等待几秒后,驱动B完成,然后执行4),可以如果在应用层Ctrl-C后,在3)的语句不等待,直接在4)中断, 然后执行会出现错误.而且返回值好像是个地址? 怎样我描述清楚了吗? |
|
|