a464086549
驱动牛犊
驱动牛犊
  • 注册日期2012-06-20
  • 最后登录2013-02-23
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2370回复: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 的声明 注释寥寥草草 基本上跟没写一样 中国人出的书烂死
游客

返回顶部