start
驱动小牛
驱动小牛
  • 注册日期2001-11-05
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:799回复:4

请大手过来看看

楼主#
更多 发布于:2002-11-02 11:49
我的问题:

      驱动之间调用的问题,已经好久没有解决了,有益的过来帮忙.

  我的程序流程应用层发命令,中间级的驱动受到命令后,重新生成
 新的IRP命令请求发送到另外一个驱动.
  我采用了KLowerDevice类实现,目前要命的问题是当我从应用层测试时候,如果Ctrl-C后,在win98下出现死机.
   根据我的跟踪看,在应用层Ctrl-c后,底层的驱动执行Close的IRP了,可是中间级驱动生成的IRP还没有释放,这样是不是死机的原因呢?


  欢迎大手给我指点迷津,欢迎有类似的情况的同志和我讨论.






  
  
second
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-11-02 17:23
应该不是,资源不释放,不会立即死机。
start
驱动小牛
驱动小牛
  • 注册日期2001-11-05
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-03 11:52
fracker,高手

  我碰到的现象是出现蓝屏,程序不能运行.

  能说的详细点码? 说说导致系统死机的原因.谢谢

  
second
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2002-11-03 13:18
我没明白你的意思,我没用过DS写程序,不清楚KLowerDevice是个什么概念,你表述的清楚些好吗?
start
驱动小牛
驱动小牛
  • 注册日期2001-11-05
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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)中断,
然后执行会出现错误.而且返回值好像是个地址?

怎样我描述清楚了吗?



second
游客

返回顶部