bizhan123
驱动小牛
驱动小牛
  • 注册日期2006-12-26
  • 最后登录2012-03-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望166点
  • 贡献值0点
  • 好评度125点
  • 原创分0分
  • 专家分0分
阅读:1401回复:3

HELP!关于DeviceIoControl驱动与用户程序交换数据

楼主#
更多 发布于:2007-01-09 13:31
在我的驱动中,我将驱动部分的数据(为一个链表)输出到ouputbuffer缓冲中,让IO管理程序拷贝到用户区。可是,当拷贝数量较小时,没有问题。当数据量达到一定程度时,应该是3K不到(N个结构),就出现BSOD。无论我用METHOD_BUFFERED还是用METHOD_IN_DIRECT,都不行。

请大家帮我分析一下问题出在哪里了吗?在数据传输的时候,有时间限制吗?我发现遍历拷贝这个链表需要一定的时间。其实,数据量非常不大。

大家帮助分析下吧,感激万分。
实用信息:www.infozobo.com
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-01-09 13:33
是用systembuffer还是 userbuffer呢
驱动开发者 呵呵
bizhan123
驱动小牛
驱动小牛
  • 注册日期2006-12-26
  • 最后登录2012-03-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望166点
  • 贡献值0点
  • 好评度125点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-09 13:39
引用第1楼WQXNETQIQI2007-01-09 13:33发表的“”:
是用systembuffer还是 userbuffer呢

用的是systembuffer。
按照我的理解,不是IO管理程序负责把systembuffer拷贝到userbuffer吗?
实用信息:www.infozobo.com
bizhan123
驱动小牛
驱动小牛
  • 注册日期2006-12-26
  • 最后登录2012-03-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望166点
  • 贡献值0点
  • 好评度125点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-09 14:04
问题已经解决:指针计算出错。

我程序里原来有一句:pthd = (thdata *)((thdata *)pthrd +sizeof(thdata));
后来我把它改成了:pthd = (thdata *)((char *)pthd +sizeof(thdata));
结果BSOD就消失了。真是不容易啊,自己太笨了,这个错误困惑了我好几天了。今天总算找到了根源。

谢谢大家!
实用信息:www.infozobo.com
游客

返回顶部