以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 驱动中实现模拟键盘按键 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=51999) |
-- 作者:卷积内核 -- 发布时间:8/30/2007 4:33:00 PM -- 驱动中实现模拟键盘按键 在ring3中实现模拟键盘按键有N^N种方式,比如SendInput()、keybd_event()……但在驱动中要怎么模拟呢? 1、写端口大法 BOOLEAN for (i = 0; i < 1000; ++i) return i ? TRUE : FALSE; VOID PressKeyByScanCode( WaitForKeyboardWrite(); WRITE_PORT_UCHAR(defI8042_DATA_PORT, ScanCode); 搞定,简单易行!缺点是只对PS/2键盘有效,USB的就一边凉快去吧。 2、构造IRP大法 3、调用KeyboardClassServiceCallback()大法 KeyboaredClassServiceCallback函数的原型如下: typedef VOID (* PFN_KeyboardClassServiceCallback)( 第一个参数DeviceObject是kbdclass的DeviceObject,怎么得到它呢?思路:先找到kbdclass的DriverObject,然后从DriverObject得到DeviceObject。 缺点:每个系统的kbdclass.sys中的KeyboardClassServiceCallback的RVA都不相同,要自己hardcode一下,不过写驱动本来就是那么麻烦,习惯了就好。 |
-- 作者:卷积内核 -- 发布时间:8/30/2007 4:33:00 PM -- 操作硬件板卡方式 WinCE一般有两种方式访问硬件 1、内存隐射 代码如下: #include <Pkfuncs.h> LPVOID reg = VirtualAlloc(0, 32, MEM_RESERVE, PAGE_NOACCESS); VirtualFree((PVOID)reg , 32, MEM_RELEASE); //用完了要记得释放哦 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |