软件结构比硬件结构复杂很多,包含很多层次,如总线驱动,功能驱动,过滤驱动等。
1.总线驱动
位于驱动栈最下层,处理资源分配,自设备管理,负责处理上层驱动发下来的请求。USB设备总线驱动主要有2类:控制器驱动、Hub驱动。(还有一个端口驱动,太偏门,不提也罢)
1.1控制器驱动:usbohci.sys usbuhci.sys usbehci.sys
HCI即是 Host Control Interface 缩写。到目前为止,由3种HCI协议出现:USB1.1 OHCI和UHCI 、USB2.0 EHCI
echi是向前兼容的,即第3个驱动包含了前两者的功能。
1.2 Hub驱动: usbhub.sys
Hub驱动是所有USB设备的父驱动。
Hub驱动的自设备要么是独立设备,要么是一个包含多个子设备的父设备。Hub设备只为直系子设备创建唯一的物理设备对象。
1.3 端口驱动:usbport.sys
这个框架驱动,比较复杂。。不说了
2.系统类驱动(简称类驱动)
USB设备包含很多通用的功能,形成了多种类别。 系统就把常见/常用的几类驱动默认添加到系统中了。
大多数情况下,系统类驱动就是功能驱动。
3.功能驱动
不是所有的USB设备都有类驱动,但功能驱动却是它们唯一的身份证。没有功能驱动,设备就不足以在系统中存在。功能驱动的作用是为设备创建一个独一无二的内核设备对象(DEVICE_OBJECT)以及设备栈,并在需要时,使得系统能通过此设备对象找到它。
如果用户层要使用该USB设备,则功能驱动更是必不可少的。它在用户程序可见的名字空间中为设备起了一个别名,这个比诶那个可以是一个符号连接,也可以是一个由GUID定义的设备接口。对这个别名进行操作,也就是对设备本身进行操作。