首页
社区
课程
招聘
[求助]kbdclass键盘过滤无法过滤首次按键
发表于: 2015-4-14 17:02 7477

[求助]kbdclass键盘过滤无法过滤首次按键

2015-4-14 17:02
7477
加载键盘过滤驱动后第一次按键没过滤到,接下来的按键都正常,分析发现按键结束后还会有一个irp经过过滤驱动,返回status pending无限挂起,等下一次输入按键才完成这个irp,那怎么截获这个首次按键呢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 6
活跃值: (1523)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一个没过滤到,很奇怪的
2015-4-14 17:29
0
雪    币: 50
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
键盘一直处于等待获取按键的状态吧
要么你先给它一个按键
满足之前那一次获取
后面的请求就能过滤到了嘛
菜鸟愚见 不知道能不能行的通
2015-4-14 17:52
0
雪    币: 63
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
分析后流程是这样的:
没有按键的时候系统就会发送一个irp到底层驱动去请求hid设备的键入,如果没有键入这个irp会一直被设置成pending,直到最后有键入按键信息才会被底层驱动完成该irp,类似监听的概念。
也就是说在我们没加载键盘过滤驱动的时候这个irp已经被发出了,只是没有按键键入这个irp一直是pending,等加载过滤驱动后,有按键键入时这个irp被完成了,但我们没机会设置这个irp的完成函数。
2015-4-14 17:52
0
雪    币: 63
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我想过这个解决办法,但我现在过滤的是条码扫描枪,怎么模拟扫描枪的按键啊。
2015-4-14 17:53
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
读取弹起的键。
2015-4-14 18:37
0
雪    币: 63
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
需求需要屏蔽按键,所以必须把按下给弄出来。
2015-4-14 18:46
0
雪    币: 34
活跃值: (830)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主解决这个问题了吗,求教
2015-8-13 20:31
0
雪    币: 63
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
解决了,找到那个挂起的irp然后取消这个IRP。
2015-11-25 11:08
0
雪    币: 34
活跃值: (830)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主,求具体的解决方法,求教了
2015-11-25 11:49
0
雪    币: 63
活跃值: (177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
在过滤这个kbdclass设备之前先找到子系统发到这个设备上的read irp,具体查找流程是:枚举进程找到csrss进程-->枚举该进程的线程中的irp列表-->找到发到你要过滤设备的irp(这个irp一定是pending状态,因为当前没有按键触发),找到这个irp后绑定设备取消这个irp,子系统会马上再发一个read irp到你的设备上,这样就可以了。
2015-11-25 13:12
0
雪    币: 1515
活跃值: (6002)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
12
IRP应该挂线程未完成的IRP链表里面了,你是用了未导出的THREAD结构定义去得到链表然后取得IRP吗
2015-11-25 13:45
0
雪    币: 4984
活跃值: (4177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习了,正好碰到这个问题
2016-4-21 15:35
0
游客
登录 | 注册 方可回帖
返回