阅读:1476回复:4
DDK sample usbbulk 切分IRP后出现的问题??
我编译DDK例子中的usbbulk例子后在运行中发现 , 在stagedread中假如客户端的读写请求小于等于最大字节那么程序运行正常,否则例子程序采用了切分IRP成多个子irp并且将MDL进行映射, 但是我发现每次调用iocalldriver后子irp的mdl(就是映射一段后得到的)被free了,而通过usbhond观察读到的数据是真确的,但是我得原始mdl确没有得到正确的结果,我想请问这种切分irp或者说是映射mdl的方法有什么问题,还是可以通过其他什么方法进行!!!!????
|
|
沙发#
发布于:2002-12-23 15:12
Please describe your problem detailly.I\'d like to help u until u tell me the detail bug.
|
|
|
板凳#
发布于: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!!谢谢 |
|
地板#
发布于:2002-12-24 09:23
这个sample我用过,没问题
|
|
地下室#
发布于:2003-01-03 11:11
为什么要用MDL方式呢?MDL实际上是两级地址映射,虽然可以节省一点内存但并不重要,你可以改用direct-io方式,我就是用这个的,很好使。
|
|
|