USB过滤驱动已经做了两个月了!!基本上快完工了!!所以现在想把在这个驱动 的开发经历记下来~~~同时也希望能够和大家分享一下,或者切磋~~.
一开始USB过滤驱动的基本框架是一个群友给的!!安装方法是在注册表的CLASS键下找到要过滤的类,{36FC9E60-C465-11CF-8056-444553540000}我要过滤的是USB类的设备.在LOWERFILTERS字符键里加上驱动程序的名字我的是"FILTER" .这个步骤后就是INF文件了!!INF文件的作用就是让我的驱动服务在系统启动的时候就被加载
(这种安装是手动的,同时还可以用软件做,这样安装会更方便,我写的安装软件是模仿DDK里的一个例子DEVCON.我的大部分的代码是从它里面拷贝的)
[DestinationDirs]
DefaultDestDir=10,system32/drivers
FiltJectCopyFiles=11
[SourceDisksFiles]
filter.sys=1
[SourceDisksNames]
1=%INSTDISK%
;------------------------------------------------------------------------------
; Windows 2000 Sections
;------------------------------------------------------------------------------
[DefaultInstall.nt]
CopyFiles=DriverCopyFiles
[DriverCopyFiles]
filter.sys,,,0x60 ; replace newer, suppress dialog
[DefaultInstall.nt.services]
AddService=filter,,FilterService
[DefaultUninstall.nt]
DelFiles=DriverCopyFiles
[DefaultUninstall.nt.services]
DelService = filter,0x200
[FilterService]
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%10%/system32/drivers/filter.sys
;------------------------------------------------------------------------------
; String Definitions
;------------------------------------------------------------------------------
[Strings]
MFGNAME="Walter Oney Software"
INSTDISK="WDM Book Companion Disc"
DESCRIPTION="Sample Filter Driver"
RUNONCEKEYNAME="Software/Microsoft/Windows/CurrentVersion/RunOnce"
上面的步骤后驱动就可以工作了~~下面的工作就是在驱动里面过滤来自上层的各种USB请求,我的目的是过滤所有的U盘的通讯.所以我在ADDDEVICE例程里用IoGetDeviceProperty获得每一个设备的类型描述,如果是USB Mass Storage Device我就会对他的USB请求进行过滤.也可以直接向设备发送设备描述符请求.
还有其他功能性的代码就不用提了!!当然还有很多问题关键的地方我也记不的了~~~呵呵.
接下来我又遇到一个新问题~~~我的过滤驱动不能够过滤所有的USB设备!!因为我在注册表里挂的是USB类设备,所以例如:HID,图象设备,USB网卡设备.系统是 不会让我的过滤插入的.
怎么解决呢!我知道有一个USB设备调试经常用的一个总线活动监视软件BUS HOUND,他能够监视所有插在USB端口上的设备.我不会逆向分析,呵呵只有看书了,在网上又找不到方法~~(也许这个问题也讨论的人不多吧!)
看了几天书,找到答案了~~呵呵,答案就在老早就看过的一本介绍USB设备的书~~~
不写了~~~先吃饭