首页
社区
课程
招聘
[已解决]一个键盘过滤驱动的问题
2009-9-3 23:33 7054

[已解决]一个键盘过滤驱动的问题

2009-9-3 23:33
7054
有A和B两个键盘过滤驱动,
都Attach到KeyboardClass0,
其中A在B之后Attach,
但为何A截获到的扫描码不是原始的,
而还是被B过滤过的呢?

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (11)
雪    币: 7513
活跃值: (2116)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
寒冰心结 2009-9-4 03:24
2
0
这不是开玩笑嘛。。

肯定是后截获了。

你要知道堆栈的成长方向跟IRP的传递过程。。

当CPU感受到外部中断。。就是说。知道外部有输入了。

于是构造一个IRP。发给键盘驱动去处理这个事情。

IRP。从栈顶而下。一层一层的到达最底端的物理键盘设备驱动(假设的。)

等获取了信息。再从物理键盘设备驱动原路一层一层的返回。

B在A下面(B先Attach)。。返回的时候肯定是B先获得了。

注释:以上说法纯个人通俗理解。非官方文档。仅作参考。
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-9-4 06:17
3
0
过滤驱动之间也是有层次关系的,后来者居上,它最先接到Irp,但返回时则是最后一个
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aliwy 2009-9-4 08:34
4
0
就是类似这样的关系:
—KeyboardClass0
  │
   —B Device
     │
      —A Device

是不是可以这样理解:
按键信息首先传递到A,然后是B,最后到达键盘驱动,
我们在A中调用KdPrint打印的时候,
打印出的扫描码则是由键盘驱动传递到B,B再传递到A,
最终打印出的扫描码就是经过B过滤了的。
是这样吗?
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-9-4 10:23
5
0
那个层次关系直接用DeviceTree就可以看到了~
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aliwy 2009-9-4 16:30
6
0
既然它最先接到Irp,那为何此时KdPrint出来的不是实际的扫描码呢?
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-9-4 18:31
7
0
它第一次接到Irp的时候里面还没有数据呢,所以要设置完成例程继续发下去啊,等Irp带着数据返回时,它的完成例程才有机会处理数据,不过这时候的数据已经是底层驱动的完成例程处理过的了
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aliwy 2009-9-4 22:32
8
0
哦,明白了,以前一直理解反了,谢谢achillis。
我记得好像在哪本书上看过,介绍以前QQ的密码输入驱动保护,
说它是在开始输入密码时才挂接,所以就防止了盗号,
所以我一直以为在最外层的才是截获到最初的扫描码。
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-9-5 00:15
9
0
那得看数据的流向了,如果数据是从上往下,那么最顶层的设备确实是最先接触到数据的,比如文件防删,待删除的文件的信息数据是从上往下传的;在这个例子里,从上往下的是请求,真正的数据是从下往上传的,所以就变成最底层的设备先接触数据了,道理很简单啊
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 4 2009-9-5 08:35
10
0
唉……我来给你解释吧。做个通俗的比喻:

我、A、B、苹果商,四个人排成一排,我想要苹果(按键信息),传个篮子(IRP)给A,A传给B,B传给苹果商,苹果商放了一个苹果在篮子里(用按键信息填充IRP),然后把篮子原路往回传给B,B把篮子里的苹果换成了梨(截获、更改了按键信息),所以传给A的时候,篮子里的内容已经变了。
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aliwy 2009-9-7 15:23
11
0
谢谢各位,明白了!
雪    币: 97
活跃值: (30)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
DebugFan 3 2009-9-19 14:12
12
0
不错不错,描述得相当生动
游客
登录 | 注册 方可回帖
返回