rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
阅读:1650回复:4

USBD接口操作的数据结构

楼主#
更多 发布于:2007-08-23 00:29
前阵写文档时画的一个图,描述USBDI总线驱动操作的数据结构,熟手就不用看了。

1. USB功能驱动与总线驱动之间的信息交换符合WDM模型中的底层与高层驱动之间的信息交换规范,即采用IRP结构;

2. IRP结构中有一个IO_STACK_LOCATION,该成员指定一个栈的位置,这个栈用来存储处理该IRP的当前层驱动要用到的与该IRP相关的参数;

3. IRP参数栈中有一个主功能代码,用来表示IRP的主功能代号;还有一个副功能代号,用来区分同一个主功能的多个副功能。对于特定的主功能,IRP参数栈中的参数结构不一样。IRP主功能有IRP_MJ_CREATE、IRP_MJ_DEVICE_CONTROL等十多个;

4. USBD总线驱动支持代号为IRP_MJ_INTERNAL_DEVICE_CONTROL的主功能,该主功能IRP用于USB功能驱动于总线驱动之间的USB操作。当IRP的主功能代号为IRP_MJ_INTERNAL_DEVICE_CONTROL时,IRP参数栈中的Parameters成员是一个DeviceIoControl结构,这个结构中的IoControlCode定义了多种控制代码;

5. USBD总线驱动支持的IoControlCode控制码包括IOCTL_INTERNAL_USB_RESET_PORT等10多种控制码,这些控制码用于实现不同的总线操作。其中一个控制码是IOCTL_INTERNAL_SUBMIT_URB,用于向USBD总线驱动提交URB;

6. 当控制码是IOCTL_INTERNAL_SUBMIT_URB时,IRP参数栈中的Parameters的Other结构的Argument1成员指向一个URB结构;

7. URB结构有多种,用于实现不同的总线操作,包括批量传输、等时传输等。

最新喜欢:

zhoujiamurongzhouji...
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-08-23 15:37
谢谢共享.BTW,这个图用什么工具做的.
一起交流,共同提高!
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-24 01:35
引用第1楼lejianz于2007-08-23 15:37发表的  :
谢谢共享.BTW,这个图用什么工具做的.


就用visio画的,改了一下格式
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-13 10:12
太感谢了!
phitifair
驱动牛犊
驱动牛犊
  • 注册日期2008-01-19
  • 最后登录2008-08-19
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望14点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-06-07 14:11
东西看的有80%明白了,可是还是不会写一个驱动啊,急死人了~
游客

返回顶部