本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 4608|回复: 11

负责键盘输入的设备对象名字为"\device\keyboardclass1",求解 [复制链接]

Rank: 1

发表于 2009-11-6 12:53:56 |显示全部楼层
大家好,遇到个奇怪的问题,希望得到大家的帮助.先谢过.:)

先把调试信息放出:
// 列kbdclass的信息
lkd> !drvobj 8a1f32c8
Driver object (8a1f32c8) is for:
\Driver\Kbdclass
Driver Extension List: (id , addr)

Device Object list:
8a4fe558 8a4d8998

// 列8a4fe558的信息("keyboardclass1")
lkd> !devobj 8a4fe558
Device object (8a4fe558) is for:
KeyboardClass1 \Driver\Kbdclass DriverObject 8a1f32c8
Current Irp 00000000 RefCount 0 Type 0000000b Flags 00002044
Dacl e175367c DevExt 8a4fe610 DevObjExt 8a4fe6f0
ExtensionFlags (0000000000)
AttachedTo (Lower) 8a4e2238 \Driver\kbdhid

//递推keyboardclass1的再下一层

lkd> !devobj 8a4e2238
Device object (8a4e2238) is for:
\Driver\kbdhid DriverObject 8a2a6040
Current Irp 00000000 RefCount 0 Type 0000000b Flags 00002000
DevExt 8a4e22f0 DevObjExt 8a4e24b0
ExtensionFlags (0000000000)
AttachedDevice (Upper) 8a4fe558 \Driver\Kbdclass
AttachedTo (Lower) 8a357a98 \Driver\hidusb

再看 keyboardclass0的内容和它下面设备的内容

lkd> !devobj 8a4d8998
Device object (8a4d8998) is for:
KeyboardClass0 \Driver\Kbdclass DriverObject 8a1f32c8
Current Irp 00000000 RefCount 2 Type 0000000b Flags 00002044
Dacl e175367c DevExt 8a4d8a50 DevObjExt 8a4d8b30
ExtensionFlags (0000000000)
AttachedTo (Lower) 8a36cec0 \Driver\TermDD

lkd> !devobj 8a36cec0
Device object (8a36cec0) is for:
RDP_CONSOLE0 \Driver\TermDD DriverObject 8a1ac298
Current Irp 00000000 RefCount 0 Type 00000027 Flags 00000044
Dacl e175367c DevExt 8a36cf78 DevObjExt 8a36cfd0
ExtensionFlags (0000000000)
AttachedDevice (Upper) 8a4d8998 \Driver\Kbdclass
AttachedTo (Lower) 8a75bdf0 \Driver\PnpManager

两个devobj的挂接关系如下,
hidusb<-kbdhid<-keyboardclass1
PnpManager<-TermDD <-keyboardclass0


我的问题是:可以通过什么办法获取当前的输入是由keyboardclass0还是keyboardclass1来负责的呢?以前一直以为keyboardclass0都是负责的,以前写的测试程序一直都假定是这样,后来,不知装了什么程序后,今天跑了下原来的程序,发现没反应,才发现是keyboardclass1来负责输入了(硬件没改过,键盘没换过接口,删删装装了些软件)

Rank: 9Rank: 9Rank: 9

发表于 2009-11-6 13:13:55 |显示全部楼层
是不是装过类似于模拟按键的软件啊?
悟空,退下,为师一个人就够了

Rank: 1

发表于 2009-11-6 13:32:25 |显示全部楼层
感谢xikug回复.

不记得有没安装过类似的东西,我在下面的附件中附irpTracker对keyboardclass1的拦截信息(我分析不出来这个irp的作用)。

如果安装过模拟按键等类似的东西后,我如果还想做键盘过滤的话,可以挂在哪个设备名下呢?(昨天试过直接挂在keyboardclass1后BSOD,郁闷死)
test.JPG

Rank: 1

发表于 2009-11-6 13:52:09 |显示全部楼层
再附一张DevTree的图,完整的设备树中找不到i8042这个设备对象名了(之前写驱动时候一直用devTree来观察自己驱动附加所在层次,印象很深),昏倒。。
2.JPG

Rank: 9Rank: 9Rank: 9

发表于 2009-11-6 14:01:28 |显示全部楼层
你是通过远程终端上去的?远程终端就是设备1
悟空,退下,为师一个人就够了

Rank: 4

发表于 2009-11-6 14:02:19 |显示全部楼层
你的是USB键盘,当然没有i8042啊

Rank: 2

发表于 2009-11-6 14:26:08 |显示全部楼层
直接hook xx函数,PS2和USB一网打尽

Rank: 4

发表于 2009-11-6 14:29:24 |显示全部楼层
类驱动kbdclass再往下就不通用了~

Rank: 1

发表于 2009-11-6 14:29:27 |显示全部楼层
@xikuG:
不是远程终端上去的,直接主机上的开机。台式机装的东西太多,移到本本上写和调试,写完拿到主机上跑

@achillis:
确实,我记错了,记得是本本上的信息

那么应该是不兼容USB键盘这个问题了,如果是USB键盘的话,我可以挂在哪个设备名下面来实现过滤驱动呢?( 如前述,挂在keyboardclass1上直接蓝了)

Rank: 1

发表于 2009-11-6 15:32:49 |显示全部楼层
谢谢各位回复,我刚才回完出去了,没想到己经给出答案了,我试下别的办法吧

Rank: 4

发表于 2009-11-6 16:24:41 |显示全部楼层
参考寒江里面的做法,直接挂CALLBACK.本论坛好象也有代码的.

Rank: 1

发表于 2013-1-9 08:56:16 |显示全部楼层
好的
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-5-22 15:54 , Processed in 0.024267 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部