《寒江独钓》键盘过滤部分程序修改

看书的时候,发现书里第四章的键盘过滤程序并不能实现打印出扫描码详细信息的功能。我将程序修改了一下以后,可以实现该功能。以下是我的修改之处:

void __stdcall print_keystroke(UCHAR sch,USHORT stch)
{
 UCHAR ch = 0;
 int  off = 0;

if (!stch) //make
 {
  switch (sch)
  {
  case 0x3A:
   kb_status ^= S_CAPS;
   DbgPrint("CAPS");
   break;

case 0x2A:
  case 0x36:
   kb_status |= S_SHIFT;
   DbgPrint("SHIFT");
   break;

case 0x45:
   kb_status ^= S_NUM;
  }
  
      
 }
 else  //break
 {
  if (sch == 0x2A || sch == 0x36)
   kb_status &= ~S_SHIFT;
 }
 
 if ((sch < 0x47) || 
    ((sch >= 0x47 && sch < 0x54) && (kb_status & S_NUM))) // Num Lock
   { if(kb_status==6||kb_status==2) off=84;
    if(kb_status==5||kb_status==1) off=168;
    if(kb_status==7||kb_status==3) off=252;
    ch = asciiTbl[off+sch];
   }

if (ch >= 0x20 && ch < 0x7F)
 {
  DbgPrint("%C \n",ch);
 }

}
标红的地方就是我修改的地方。主要有:

(1)原程序是用sch与0x80相与是否为零判断其是按下状态还是释放状态。通过调试我发现自己的电脑并没有在扫描码最高位添1来表示其DOWN或UP状态,所以我将函数修改了一下,将KeyData->Flags的值传进去来判断其状态,1为UP,0为DOWN。

(2)对于SHIFT键需要判断其处于按下或弹起,因为其按下有效,弹起则无效。

(3)原程序中虽设置了一个偏移值off,但其未对它进行处理。我根据头文件的ASCII码表,对于CAPS、SHIFT以及两者同时按下的情况对off值进行处理,从而实现打印出相应大小写值。

目前仍存在一个问题未解决,就是每次驱动服务启动后,对于第一个按下的键无法捕捉到其按下的状态,只能反应出该键弹起的状态。现在仍不清楚其原因是什么。

程序有一个好玩的地方就是可以修改按键的扫描码,从而使系统无法正确接收到键盘输入的信息。这一点可以用来做些简单的木马程序。

转自:http://blog.163.com/sherlock_105/blog/static/3275329201051915733261/

《寒江独钓》键盘过滤部分程序修改相关推荐

  1. 寒江独钓键盘过滤卸载蓝屏

    1.status = ObReferenceObjectByName( &uniNtNameString, OBJ_CASE_INSENSITIVE, NULL, 0, *IoDriverOb ...

  2. windows7 《寒江独钓》传统键盘过滤驱动学习

    本人驱动方面小白一枚,如果有什么不足之处与不正确之处还请各位大佬多多指正. 另外,本篇博客参考了以下博客,非常感谢原作者的分享!我在学习的时候真的受到了很大的帮助! IRP相关: http://blo ...

  3. 寒江独钓-Windows内核安全编程(完整版).pdf

    寒江独钓-Windows内核安全编程(完整版).pdf   编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件.硬件资源.因此,稍有不慎就有可能将系统变得不稳定.W ...

  4. 寒江独钓:Windows内核安全编程(china-pub到货首发)

    寒江独钓:Windows内核安全编程(china-pub到货首发) [作 者]谭文;杨潇;邵坚磊等 [丛 书 名] 驱网核心技术丛书  [出 版 社] 电子工业出版社     [书 号] 978712 ...

  5. 寒江独钓前辈的第一个例子的编译运行过程

    环境: vs2103 +wdk 7+ 看雪中的2013 模板   可以参考我的上篇文章. 环境ok后,可以编译前辈的驱动例子了. 从网上下载了寒江独钓的第一个驱动例子代码  串口过滤 comcap. ...

  6. 《寒江独钓》内核学习笔记(1)-- IRP - .Little Hann

     原文  http://www.cnblogs.com/LittleHann/p/3450436.html 在学习内核过滤驱动的过程中,遇到了大量的涉及IRP操作的代码,这里有必要对IRP的数据结 ...

  7. 寒江独钓 Windows内核安全编程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! < ...

  8. 《寒江独钓》内核学习笔记

    <寒江独钓>内核学习笔记(1)-- IRP - .Little Hann 时间 2013-11-30 15:40:00  博客园_.Little Hann原文  http://www.cn ...

  9. 寒江独钓——Windows内核安全编程

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow <寒江独钓- ...

最新文章

  1. 图解Oracle 12c 触发器实例
  2. for range 经典问题
  3. ios上架图片在线制作_不同风格gif在线制作,公众号动态图片制作方法
  4. Spring Boot:构建一个RESTful Web应用程序
  5. AKI-H8串口通信
  6. 信息学奥赛一本通——1001:Hello,World!
  7. Opencv之读取yuv420P
  8. Oracle数字从两头排序,oracle字符串型数字排序问题
  9. android开发rn插件,RN native module 插件开发
  10. CPC客户端的安装方法
  11. 设计模式六大原则——单一职责原则(SRP)
  12. 崩坏三8月20号服务器维修,崩坏3手游8月20日更新了什么
  13. 笔记—R语言做相关气泡图
  14. 零基础学习人工智能如何入门?
  15. UI自动化辅助工具Inspect
  16. HTML 直播 RTMP流实时播放
  17. JavaFX实现学生成绩管理系统(综合实践大作业)
  18. Jenkins插件离线下载及导入
  19. 最全Android安全检测漏洞解决方案
  20. 结构化编程(SP,structured programming)

热门文章

  1. 常用音频编码格式简介(PCM、G726、ADPCM、LPCM、G711、AAC)
  2. Jetson AGX xavier测试六叶树Usb转Can卡通信记录笔记
  3. 深圳市租房提取住房公积金攻略
  4. FPG-超越FPN/NAS-FPN的表现 | Feature Pyramid Grids
  5. 赛扬N4000和赛扬N5095的区别
  6. 唯品会RPC服务框架与容器化演进--转
  7. zookeeper集群在线迁移(扩容)详解
  8. 华为手机 鸿蒙,实力强劲的四款华为手机:均支持更新鸿蒙系统,你的在内吗?...
  9. 计网必会:P2P体系结构,BitTorrent,DHT,分布式散列表
  10. java微信小程序、APP 西门子PLC通信,java S7-S200、java S7-300、java S7-400,java与PROFINET协议通信 Java与西门子PLC通信