guolin
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2003-04-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1477回复:4

DDK sample usbbulk 切分IRP后出现的问题??

楼主#
更多 发布于:2002-12-23 11:46
我编译DDK例子中的usbbulk例子后在运行中发现 , 在stagedread中假如客户端的读写请求小于等于最大字节那么程序运行正常,否则例子程序采用了切分IRP成多个子irp并且将MDL进行映射, 但是我发现每次调用iocalldriver后子irp的mdl(就是映射一段后得到的)被free了,而通过usbhond观察读到的数据是真确的,但是我得原始mdl确没有得到正确的结果,我想请问这种切分irp或者说是映射mdl的方法有什么问题,还是可以通过其他什么方法进行!!!!????
MacWin
驱动中牛
驱动中牛
  • 注册日期2002-12-16
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望44点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-23 15:12
Please describe your problem detailly.I\'d like to help u until u tell me the detail bug.
Chen
guolin
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2003-04-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-23 15:56
非常感谢macwin的关注,我的问题就是同描述的一样我把ddk的例子直接拿来用 。现象是,所有的staged irp全部被完成 , 并且我得usb设备确实发生了一些列读操作(通过usbhond),而且可以证实usb设备确实已经将我所要的内容读取回来,但是我的原始MDL的缓冲区确没有读到数据.

代码就是NTDDK中的例子

因为确实观测到了数据,并且所有的staged irp都被完成了,因此我认为这段代码的mdl这种做法有问题.(导致了原始MDL没有被填充)

iocalldriver是在创建了stagedirp , mappedmdl后调用的,就是完成真正的传输。当这个函数返回后,我发现, stagedirp->mdl这个域已经失效了.


代码,兄台可以参看ddk sample!!谢谢



  
Davisfront
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-09-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-24 09:23
这个sample我用过,没问题
bluestaring
驱动牛犊
驱动牛犊
  • 注册日期2002-12-25
  • 最后登录2006-08-23
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-03 11:11
为什么要用MDL方式呢?MDL实际上是两级地址映射,虽然可以节省一点内存但并不重要,你可以改用direct-io方式,我就是用这个的,很好使。
IT的冬天到了,春天还会远吗?
游客

返回顶部