阅读:3436回复:5
HID键盘,拦截consumer control
大家好:事情是这样的,我有一个usb keyboard,公司的任务是如何拦截并且吃掉一些multimedia keys(consumer control), 系统hidusb枚举到这个键盘有四个top-level collection,并且为这四个top-level collection创建了4个pdo.其中一个对应HID consumer.我想为这个pdo加个filter来过滤我们有兴趣的consumer contol.我的filter很简单,就是在收到read irp时挂一个completion routine.在completion routine中来监测数据。我发现系统找到了我的驱动,也成功的完成了driverentry.可是,我的驱动总是不能成功的加载。而且,我注意到adddevice根本就没有被调用。
我的inf文件中只是简单在enum项中加入一个lowerfilter. 还有,我没有安装原来系统中有的hidserv.exe.是不是由于这个原因,才没有成功?希望有经验的高手多多指教,谢谢。 |
|
最新喜欢:harton... |
沙发#
发布于:2003-06-05 09:56
你的 inf 可能写的不对。
|
|
|
板凳#
发布于:2003-06-05 10:58
这是我的inf文件,
[Version] Signature=\"$CHICAGO$\" Class=HIDClass ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da} provider=\"Company\" LayoutFile=layout.inf, layout1.inf, layout2.inf DriverVer=4/6/2003,1.00.0001.1 [Manufacturer] \"Company\"=Company ;=============================================================== [Company] \"consumer control filter\"=HIDSystemConsumer,HID\\Vid_xxxx&Pid_xxxx&Rev_xxxx&MI_01&Col02,HID\\Vid_xxxx&Pid_xxxx&MI_01,HID_DEVICE_SYSTEM_CONSUMER [DestinationDirs] HidServ.Copy = 10,system32 consumer.Copy = 12 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;; Install section for HID Consumer Control devices ;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [HIDSystemConsumer.NTx86] CopyFiles=HidServ.Copy,consumer.Copy AddReg=HidServ.AddReg [HIDSystemConsumer.NTx86.Services] AddService=Consumer,,Consumer.Add.Services [Consumer.Add.Services] DisplayName = \"Consumer Control PDO filter\" ServiceType = 1 StartType = 3 ErrorControl = 0 ServiceBinary = %12%\\Consumer.sys [HIDSystemConsumer.NTx86.HW] AddReg = Consumer.HW.AddReg [Consumer.HW.AddReg] HKR,,\"Lowerfilters\",0x00010000,\"Consumer\" [HidServ.Copy] hidserv.exe,,,0x00000040 [consumer.Copy] Consumer.sys [HidServ.AddReg] HKLM,%RunOnce%,HidServ,,\"hidserv.exe /install\" [ControlFlags] ExcludeFromSelect = * [SourceDisksFiles] consumer.sys=1 [Strings] ;Non-localized strings ……………….. ………………… 我觉得并没有错误,而且DriverEntry已经被调用了,但windows给的错误信息是:can not load the driver for device(code 31).我觉得好像是这个filter的DriverEntry要做一些额外的工作,好像Onay的第二版里有介绍,不知那位以前做过这方面的内容,还请指教,谢谢。 |
|
地板#
发布于:2003-06-05 16:38
各位好,现在驱动已能正确加载。而且,每当按consumer control key 时,我的read completion routine 都会被调用。但是,我的read completion routine中得到的irp,不知道如何得到键盘的信息。我查看了read irp的域,没有发现和每个键相关的信息。谢谢大家了,很着急,希望高手帮帮看看。
|
|
地下室#
发布于:2003-06-06 00:01
通过观察,我发现在没有加载我的驱动时,hidserv.exe能够读到consumer autio control.但是我的驱动加载后,读到的数据都是0,不知为什么?我的read dispatch只是简单的挂了一个completion.除此外什么就是向下传???不知道为什么就只能读到0。
难道没有人做过类似的吗???是不是太弱智了? |
|
5楼#
发布于:2003-06-06 18:14
不好意思,解决了。分我就不加了。其实挺简单的。
|
|