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

KeyboardClassServiceCallback模拟按键的问题[Soved] [复制链接]

Rank: 4

发表于 2008-9-3 20:08:05 |显示全部楼层
想在驱动里实现一个最小化所有窗口,考虑了很多,最后用到驱动模拟按键。WIN + M
(当然,发IRP、直接I/O都是可行的,暂不讨论)

现在遇到的问题如下:

发送的scancode没有对应的效果。
大多时候,竟然是数字键盘 的开关在响应。
比如,我发的scancode是VK_LWIN,而改变的却是Num Lock.(就是小键盘的那个灯)

调试了一下午,还未解决,因为学的比较肤浅,找不到解决办法,各位同学请提示一下

附件是完整的代码.

驱动模拟鼠标―callback.rar

21 KB, 下载次数: 673

Rank: 9Rank: 9Rank: 9

发表于 2008-9-3 21:01:09 |显示全部楼层
scan code不等同于virtual key code
悟空,退下,为师一个人就够了

Rank: 4

发表于 2008-9-3 22:04:19 |显示全部楼层
除了scan code可能有影响,比如模拟numlock可以,但模拟win键却不行外,可能除了模拟KEYBOARD_INPUT_DATA外,还要考虑些其他的东西.还有代码也不大规范,比如IoGetDeviceObjectPointer后没有ObDereferenceObject,ZwQuerySystemInformation分配好内存后,如果查询失败(failed query),就直接return了,也不管原来分配的内存了,虽说只是测试,可也应该本着严谨的态度啊.

Rank: 5Rank: 5

发表于 2008-9-3 22:31:02 |显示全部楼层
IoGetDeviceObjectPointer很多人不知道ObDereferenceObject~很多人ObDereferenceObject了错误的东东~

珍爱生命,远离WRK党的驱动~

Rank: 4

发表于 2008-9-4 20:03:28 |显示全部楼层
Over Done!
thanks for VXK, I'm trying and trying ,and then I make it,It's test very well.

thanks for all the big cattles above...
by the way,  this code is not gaving as share ,so I had modified somewhere,eg(return without free memory), so that looks like not normal coding.may be....

Privately, I totally undertandand what  wowocock & MJ0011  had mentioned...
  

Rank: 1

发表于 2008-9-5 20:55:53 |显示全部楼层
sudami加油,谢谢你的代码啊,我也调试好了,嘿嘿,好羡慕你能和大牛们对话!要加油呀

Rank: 1

发表于 2008-9-24 13:50:32 |显示全部楼层
请问2k下的特征码是多少?如何才能获取自己需要的特征码?

Rank: 1

发表于 2009-1-13 19:27:21 |显示全部楼层
正好找到,rootkit的第8章的那方法说只支持PS/2....得到好东西了 - 。-

Rank: 1

发表于 2009-2-16 19:35:30 |显示全部楼层
引用第6楼zhansl于2008-09-24 10:50发表的  :
请问2k下的特征码是多少?如何才能获取自己需要的特征码?
我拿IDA看特征码。。。

Rank: 1

发表于 2009-2-21 19:44:27 |显示全部楼层
正学习KeyboradClassServiceCallback,顶一下

Rank: 1

发表于 2009-10-10 17:17:51 |显示全部楼层
楼主,我现在在这种情况下蓝屏

如果Kbdclass0下面有Attached其它驱动设备,然后我先调用IoGetDeviceObjectPointer获取到文件句柄,通过文件句柄在获取kbdclass0对应的设备对象,在调用后面的KeyboardClassServiceCallback的时候出现蓝屏现象

大致代码如下:
RtlInitUnicodeString( &ntUnicodeString, L"\\\\Device\\\\KeyboardClass0" );
ntStatus = IoGetDeviceObjectPointer(IN    &ntUnicodeString,
        IN    FILE_ALL_ACCESS,
        OUT    &TargetFileObject,   
        OUT    &g_kbDeviceObject
        );
g_kbDeviceObject =  TargetFileObject->DeviceObject;


调用完KeyboardClassServiceCallbackd之后,调用ObDereferenceObject(TargetFileObject)释放对之前文件对象的引用。

单步的时候运行还能正确几次,但是连续运行一定出错,出错代码为:
PAGE_FAULT_IN_NONPAGED_AREA
Fatal System Error: 0x00000050 (0xFA13C000,0x00000000,0x80536E23,0x00000000)
Break instruction exception - code 80000003 (first chance)

BugCheck 50, {fa13c000, 0, 80536e23, 0}

Probably caused by : kbdclass.sys ( kbdclass!KeyboardClassServiceCallback+da )

系统环境:windows xp sp2

我的目的是底层模拟一次USB键盘的按键操作,以实现文件过滤驱动的正常卸载操作。

Rank: 1

发表于 2009-11-14 01:39:51 |显示全部楼层
代码很强悍啊,就是不够完整,发送IO的代码补全就完美了

Rank: 1

发表于 2013-5-23 22:37:33 |显示全部楼层
哦,感谢分享,好东西,下下来学习
您需要登录后才可以回帖 登录 | 立即加入

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

GMT+8, 2019-1-24 06:05 , Processed in 0.029721 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部