sosojohn
论坛版主
论坛版主
  • 注册日期2006-01-29
  • 最后登录2021-06-25
  • 粉丝0
  • 关注1
  • 积分1047分
  • 威望535点
  • 贡献值1点
  • 好评度178点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1691回复:5

USB一些体会,希高手指点

楼主#
更多 发布于:2007-03-20 13:24
  1.一般USB驱动开发,实际是撰写自己的USBCLient驱动,通过发送内部IOCTL给
Windows自带的USB系统驱动。在这个过程中,USB系统驱动是执行的实体。
2.对每个到来的USB设备,USB总线枚举得到每一个设备。存放每一个设备的指针
在 UsbClient的Device_extension中。
3.可以采取2种方式:1标准的INF安装模式驱动2PNP通知模式

4.对于USB的结构,我们可以采用发送IRP到USB系统驱动或者发送IRP到HID系统驱

动,通过其返回信息判断出USB设备的功能。设备功能即:表明USB设备是什么,

可以执行什么功能。
PS:如UKey,当从设备功能分析出为一个SmartCard之后,就相应加载SmartCard

驱动来执行与IC卡的交护;这时候,我们可以在device_extension中把我们的设备

按SmartCard规范模拟为一个SmartCardReader,并将一些关于SmartCardReader的

相关操作发送到系统提供的SmartCardReaderLib或SmartCardReaderSys;我们是在

分析完USB设备功能之后,得出为我们关心的设备,才创建我们感兴趣的类型的设

备对象(如SmartCardReader),同时要注意创建的为有名设备对象,因为我们要控

制/操作这些感兴趣的设备。
5.由于可能会涉及多个USB设备,那么就需要管理及控制所有设备的行为,这个时

候,我们可以采用创建一个"Control_DEVICE"用来控制对其他设备共同的特性。

这个CDO设备,通常在DriverEntry中使用固定的符号链接名创建NT式设备对象,

控制应用程序(即Win32)可以打开这个CDO的句柄,并使用一些IOCTL改变驱动程序

的一般行为。
同时在IRP分发例程中,我们要处理到,CDO与普通DO的控制请求关系。要实现这

个功能,可以在设备扩展中采用一个设备的类型,也可以采用两个单独的设备扩

展,在每个结构的公共部分有设备类型标志。
(待续。。。)

最新喜欢:

yushui213yushui...
yushui213
驱动小牛
驱动小牛
  • 注册日期2006-04-17
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分1015分
  • 威望115点
  • 贡献值0点
  • 好评度102点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-20 16:11
帮你顶个
dsb8888666
驱动牛犊
驱动牛犊
  • 注册日期2007-03-21
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望35点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-26 22:49
强烈支持
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
地板#
发布于:2007-03-27 09:26
用户被禁言,该主题自动屏蔽!
inssuc
驱动牛犊
驱动牛犊
  • 注册日期2007-03-29
  • 最后登录2007-04-03
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-03 00:45
帮你顶一下
ymingsong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2007-11-26
  • 粉丝0
  • 关注0
  • 积分126分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-05 16:58
顶一个,总结得不错不错
游客

返回顶部