xingdajing
驱动牛犊
驱动牛犊
  • 注册日期2009-04-15
  • 最后登录2009-12-28
  • 粉丝1
  • 关注0
  • 积分23分
  • 威望191点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3119回复:1

WDF开发USB驱动时,关于读写处理以及和WDM之间的迷惑

楼主#
更多 发布于:2009-04-28 17:17
       最近在做VISTA下USB驱动的开发(刚接触),刚看了几天WDM,发现有WDF这个东西,就转过来看WDF。
   现在对USB读写有点不清楚,具体如下,望大大们不要吝啬,知道的留个记号。。。
   在WDK包里提供的usbsamp工程里
   driect方式
   1.首先获得MDL地址,转换虚拟地址,申请一定长度的内存单元并加入MDL MAP里
   2.使用WDM的方式的UsbBuildInterruptOrBulkTransferRequest,申请URB。
   3.通过PIPE异步方式发送URB。
   4.设置完成例程。
   5.发送I/O请求
   buffer方式
   1.获取I/O请求缓冲区地址(buffer)
   2.把申请的内存给新的memory对象
   3.异步的进行管道读写
   4.设置完成例程
   5.发送I/O请求

   这里迷惑的是
   1.driect和buffer方式是I/O方式不同,怎么前者需要去申请URB,后者的URB是框架自己去做的。
   2.为什么最后才会发送I/O请求,这个I/O请求怎么理解。不是要做的事情已经发送出去了吗?
   3.看的武安河的WDF开发,书上,都有对URB的参数的设置,但是WDK里面的KMDF例程都没有,这个正确的方式应该是什么样的?
wdfbook
驱动牛犊
驱动牛犊
  • 注册日期2009-05-06
  • 最后登录2010-01-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-05-06 16:12
武安河的WDF开发书,对urb方式是注释掉的,可以不采用这种方式,按WDK的KMDF例程好了
游客

返回顶部