liily
驱动牛犊
驱动牛犊
  • 注册日期2006-08-29
  • 最后登录2008-09-20
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1901回复:2

dma问题:武安河的原例可以正常运行,我自己修改的为何不行?

楼主#
更多 发布于:2007-11-07 16:45
应该是这个irp管理出的问题,我用softice跟踪readfile中I.readsize()可以正常访问,可是进入回调函数后,访问I.readsize()就出问题了。
网上查说:
当采用系统自动创建的IRP队列时,不采用驱动程序自己定义的队列时(即KDriverManagedQueueEx不用这个定义的队列时),采用上述两种方法编写dma准备就绪回调函数就没没有何的错误,程序就能够正确执行。

可是不用KDriverManagedQueueE这个,怎么用系统自动创建的irp队列呢?

我还要用deviceiocontrol,所以必须自己过这一关

希望大虾联系我:qq809610475
heartofdra
驱动牛犊
驱动牛犊
  • 注册日期2003-03-11
  • 最后登录2016-09-21
  • 粉丝0
  • 关注0
  • 积分443分
  • 威望88点
  • 贡献值0点
  • 好评度43点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-11-08 17:50
你用的是3.2吧? 3.2 的Wizard是不能给你生成 系统管理的队列式的 驱动框架的,而3.1可以。你可以试试3.1的向导就知道了
但是用3.2也可以做出 由系统管理IRP队列的 框架形式,这个你要自己看武安和的书关于IRP排队那一章,以及他的附件光盘中的9054 的例子。


如果你用的是驱动管理的队列, 在当运行到回调函数中,你在softice中打开WL窗口,你可以看看此时IRP的样子,你会发现很多的????, 这说明你此时的IRP是不正确的,那怎么办呢?从队列中把当前的IRP取出来。这就是两种管理队列的不同之处。


你搜搜zhangwei_351286的帖子,能给你很多的启发的
heartofdra
驱动牛犊
驱动牛犊
  • 注册日期2003-03-11
  • 最后登录2016-09-21
  • 粉丝0
  • 关注0
  • 积分443分
  • 威望88点
  • 贡献值0点
  • 好评度43点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2007-11-09 17:48
当然zhangwei_351286 的帖子也有错误,这个你得多试试
游客

返回顶部