a464086549
驱动牛犊
驱动牛犊
  • 注册日期2012-06-20
  • 最后登录2013-02-23
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2521回复:3

求教 寒江独钓Windows安全编程 键盘过滤的一个问题

楼主#
更多 发布于:2013-02-23 10:13
下面是 键盘过滤 获取 kbdclass 里的回调函数地址 的部分代码

    //循环遍历
                while(pTargetDeviceObject){
                            DeviceExt = (PBYTE)UsingDeviceExt;
                            for(;i<4096;i++,DeviceExt+=sizeof(PBTYE)){
                                        PVOID tmp; //临时变量
                                        //如果此处内存不可读或引发分页错误则 跳出
                                        if(!MmIsAddressValid(DeviceExt)){
                                                    break;
                                        }
                                        //如果找到了地址 跳出循环
                                        if(gKbdCallBack.classDriverObject && gKbdCallBack.serviceCallBack){
                                                status = STATUS_SUCCESS;
                                                break;
                                        }
                                        //在端口驱动扩展中 找类驱动对象
                                        tmp = *(PVOID*)DeviceExt;
                                        
                                        if(tmp ==pTargetDeviceObject){
                                                    gKbdCallBack.classDriverObject = (PDEVICE_OBJECT)tmp;
                                                    DbgPrint("classObject %8x\n",tmp);
                                                    continue;
                                        }
                                        
                                        //如果在设备栈 中找到了 位于 Kbdclass 的地址 那么就可认为该地址就为回调函数的地址
                                        if(tmp>KbdDriverStart && tmp<(PBYTE)KbdDriverStart+KbdDriverSize && MmIsAddressValid(tmp)){
                                                    //将这个回调函数记录下来
                                                    gKbdCallBack.serviceCallBack = (KEYBOARDCLASSSERVICECALLBACK)tmp;
                                                    AddrServiceCallBack = (PVOID*)DeviceExt;
                                                    
                                        }
                            }
请问下 AddrServiceCallBack  是声明的 还是系统未公开的函数之类的东西 我看了这个代码并没有AddrServiceCallBack 的声明
请问下AddrServiceCallBack 的意思是什么 谢谢
a464086549
驱动牛犊
驱动牛犊
  • 注册日期2012-06-20
  • 最后登录2013-02-23
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2013-02-23 11:13
这本书的作者太2了 也不知道从哪里找的代码 根本没有AddrServiceCallBack 的声明 注释寥寥草草 基本上跟没写一样 中国人出的书烂死
XiangXiangRen
总版主
总版主
  • 注册日期2003-02-22
  • 最后登录2015-09-01
  • 粉丝13
  • 关注0
  • 积分1042分
  • 威望472点
  • 贡献值1点
  • 好评度145点
  • 原创分13分
  • 专家分1分
板凳#
发布于:2013-02-23 16:45
回 a464086549 的帖子
a464086549:这本书的作者太2了 也不知道从哪里找的代码 根本没有AddrServiceCallBack 的声明 注释寥寥草草 基本上跟没写一样 中国人出的书烂死 (2013-02-23 11:13)

对你这种人我不想说什么,这本书再烂,请不要做出“中国人出的书烂死”这个结论。
何况这本书好还是烂,不是你一个人就能评定的。无数的读者都已经认同了它的价值。
代码看不懂就抱怨注释太少,一抱怨就出来骂人,这行为和得不到零花钱就吵闹的小孩没区别。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2013-09-10 18:00
AddrServiceCallBack 是一个全局变量。获得的是键盘驱动内部的CALLBACK地址。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部