同样也是寒江独钓的例子,但只给了思路,现贴出实现代码 原理是通过改变端口驱动中本该调用类驱动回调函数的地方下手 //替换分发函数 来实现过滤 #include <wdm.h> #include <ntddk.h> #include <Ntddkbd.h> #include <windef.h> // Kbdclass驱动的名字 #define KBD_DRIVER_NAME L"\\Driver\\Kbdclass" //ps2的端口驱动…
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1.    申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等:2.    配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作: 3.    向通用接口层提供接口,使得上层的协议驱动可以通过通用接口层访问控制器驱动: 4.    配合通用接口层,完成数据消息队列的排…
最近整理PE文件相关代码的时候,想到如果能在PE刚刚读进内存的时候再去修改内存PE镜像,那不是比直接对PE文件进行操作隐秘多了么? PE文件在运行时会根据导入表来进行dll库的"动态链接",那么如果我们修改PE导入表结构,就可以实现对我们自己动态库的导入,从而实现注入. 那么问题来了,选择一个合适的时机显得很重要,网上搜索了一下,大部分都是直接在文件上进行修改,有位同学说用LoadImageNotifyRoutine可以来实现. 每一个模块加载前都能触发SetLoadImageNoti…
为了安全起见,Windows XP及其以后的系统将一些重要的内存页设置为只读属性,这样就算有权力访问该表也不能随意对其修改,例如SSDT.IDT等.但这种方法很容易被绕过,我们只要将这些部分修改为可写属性就可以了,不过当我们的事情做完后记得把它们恢复为只读属性,不然会造成一些很难预料到的后果. cr0是系统内的控制寄存器之一.控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性. 控制寄存器最初出现于低级的286处理器中,以前称之为机器状态字(machine status word),…
CCNTFS [ 下载 ] 在 macOS 中完全读写.修改.访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,安装后进行简单设置即可高速传输外接NTFS硬盘文件,可全程离线使用,保障您数据的安全性 macOS本就支持NTFS,由于微软的限制,苹果将其关闭,但并没有删除:开发人员通过命令即可开启,但是对于小白来说还是有困难 Paragon NTFS For Mac 和 Tuxera NTFS for Mac并非使用原生驱动,有时候在传输数据会中断,特别是传大文件时,另外这…
现象:把usb设备接入电脑 1.Windows发现设备 2.跳出一个对话框提示安装驱动程序 问1:既然没有驱动程序,为什么了够知道是什么驱动了?? 答1:Windows里面已经有了usb总线驱动程序,接入usb设备后,是“总线驱动程序知道”是什么驱动.提示安装设备驱动程序 usb总线驱动程序负责识别USB设备,给usb设备找到对应的驱动程序 问2.usb设备种类多,为什么接入电脑就能够识别出来了? 答2.PC和USB设备都的遵守一些规范. 比如:USB接入电脑后PC机会发出,读取设备类型的命令(…
linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友一起学习技术,共同进步. 作者:liufei_learning(转载请注明出处) email:flying0216@foxmail.com IT学习交流群:160855096 转至:http://blog.csdn.net/liufei_learning/article/details/702524…
基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl 0. 导语 在嵌入式的道路上寻寻觅觅很久,进入嵌入式这个行业也有几年的时间了,从2011年后半年开始,我清楚的记得当时拿着C51的板子闪烁了LED灯,从那时候开始,就进入到了嵌入式的大门里面.嵌入式的学习从来没有停止过,中间也有无数的插曲和机缘巧合学会C++和Java,做一些好玩的应用.无论是嵌入式DSP也好,还是如今的嵌入式ARM,7年之久从来没有停止过.技术最大的好处就是,无论发展到什…
考研已经过去了,android驱动的学习也断了半年多了,现在重新捡起来学习,回顾一下Android驱动的大体框架. Android系统的核心是java,其有一个David虚拟机.Android-app操作硬件也相当于是java操作硬件. 在Linux系统上操作硬件是通过open read write等来实现,也就是操作C库.如果java能直接调用C库中的函数,也就解决了app操作硬件的问题. 下面的文章是java调用C/C++库的方法. 链接:JAVA程序通过JNI调用C/C++库 1.方法1-…
异步IO是对阻塞和轮询IO的机制补充,所谓异步IO就是在设备数据就绪时主动通知所属进程进行处理的机制.之所以说是异步是相对与被通知进程的,因为进程不知道也无法知道什么时候会被通知:这一机制非常类似于硬件上的中断.异步IO的实现也依赖于Linux内核进程的信号机制,因为异步IO就是通过SIGIO信号通知的进程,而进程在收到信号后就会像中断一样直接跳转去执行之前就注册好的信号处理接口. 用户空间 注册信号接口函数有两个版本的接口signal(int signal,sighandler_t handl…