随笔分类 -  驱动

摘要:直接从win95/98说起,因为之前的系统基本上没有保护模式的概念,程序员可以直接修改任意内存的数据。在95/98中采用的内核开发模型是VxD(虚拟设备驱动),在dos时期,程序认为它们拥有系统的一切,严格来说95/98是建立在dos的基础上的操作系统,当dos程序移植到 windows中,wind... 阅读全文
posted @ 2014-11-22 15:01 vcerror 阅读(611) 评论(0) 推荐(0)
摘要:1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。 2.DDK(Driver Develo... 阅读全文
posted @ 2014-11-22 14:54 vcerror 阅读(1968) 评论(0) 推荐(1)
摘要:现在的网络安全问题,越来越受到重视,微软在VISTA以后,使用了WFP平台来代替之前XP和03中的基于包过滤的技术,比如Transport Driver Interface(TDI)过滤,Network Driver Interface Specification(NDIS)过滤,Winsock l... 阅读全文
posted @ 2014-11-22 10:57 vcerror 阅读(4598) 评论(0) 推荐(0)
摘要:Windows 8是微软公司推出的最新的客户端OS,内部名称Windows NT 80。相对于Windows NT 5.x,其网络结构变化非常大,原有的TDI,NDIS系统挂接方法不再适用。在Windows8系统中,微软引入了两种新的网络过滤系统,WFP和NDISfilter。WFP (Window... 阅读全文
posted @ 2014-11-22 10:19 vcerror 阅读(2011) 评论(0) 推荐(0)
摘要:typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer;} UNICODE_STRING;typedef UNICODE_STRING *PUNICODE_STRING;... 阅读全文
posted @ 2014-04-11 16:54 vcerror 阅读(588) 评论(0) 推荐(0)
摘要:在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存。两种最容易的技术是:l应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存。(应用程序分配共享内存)l由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序。... 阅读全文
posted @ 2014-03-03 11:46 vcerror 阅读(334) 评论(0) 推荐(0)
摘要:驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。驱动层和应用层通信,主要是靠DeviceIoControl函数,下面是该函数的原型:BOOLDeviceIoControl(HANDLEhDevice,//设备... 阅读全文
posted @ 2014-03-03 11:45 vcerror 阅读(1396) 评论(0) 推荐(0)
摘要:1. 概述从 windows xp 和 windows 2003 开始使用了快速切入内核的方式提供系统服务例程的调用。KiFastCallEntry() 的实现是直接使用汇编语言,C 语言不能直接表达某些操作。我从 windows 2003 里反汇编出来,写成 C 伪码形式,点击这里察看:KiFas... 阅读全文
posted @ 2014-02-28 15:21 vcerror 阅读(928) 评论(0) 推荐(0)
摘要:1. 概述windows 提供了一种基于 lookaside list 的快速内存分配方案,区别于一般的使用 ExAllocatePoolWithTag() 系列函数的内存分配方式。每次从 lookaside list 里分配 fixed size 的内存。 系统构建两个条 lookaside 链表... 阅读全文
posted @ 2014-02-28 10:31 vcerror 阅读(662) 评论(1) 推荐(0)
摘要:1.检查内存可用性在驱动程序开发中,对内存的操作要格外小心。如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃。DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的情况下,试探这段内存的可读写性。VOIDProbeForRead(INCONSTVOID*Address,INSIZ... 阅读全文
posted @ 2014-02-28 10:24 vcerror 阅读(392) 评论(0) 推荐(0)
摘要:1.Lookaside结构频繁的申请和回收内存,会导致在内存上产生大量的内存“空洞”,从而导致最终无法申请内存。DDK为程序员提供了Lookaside结构来解决这个问题。我们可以将Lookaside对象看成是一个内存容器。在初始化的时候,它先向Windows申请了一块比较大的内存。以后程序员每次申请... 阅读全文
posted @ 2014-02-28 10:23 vcerror 阅读(379) 评论(0) 推荐(0)
摘要:1.分配内核内存Windows驱动程序使用的内存资源非常珍贵,分配内存时要尽量节约。和应用程序一样,局部变量是存放在栈空间中的。但栈空间不会像应用程序那么大,所以驱动程序不适合递归调用或者局部变量是大型数据结构。如果需要大型数据结构,我们可以在堆中申请。堆中申请的函数有以下几个:(1)PVOIDEx... 阅读全文
posted @ 2014-02-28 10:23 vcerror 阅读(520) 评论(0) 推荐(0)
摘要:声明:本文所描述的所有资料和源码均搜集自互联网,版权归原始作者所有,所以在引用资料时我尽量注明原始作者和出处;本文所搜集资料也仅供同学们学习之用,由于用作其他用途引起的责任纠纷,本人不负任何责任。(本资料由代码疯子整理)一、书籍推荐《Windows驱动开发技术详解》作者:张帆、史彩成;出版社:电子工... 阅读全文
posted @ 2014-02-27 11:12 vcerror 阅读(931) 评论(0) 推荐(0)
摘要:重载内核内容:1、将内核文件加载到内存2、进行基址重定位3、重定位ssdt结构4、HookKiFastCallEntry,让RING3进程调用走新内核下面一步一步的进行分析1、加载内核文件我们要加载哪一个文件呢?答案是:ntkrnlpa.exe,我测试的系统的XPsp3,该文件所在目录为C:\WIN... 阅读全文
posted @ 2014-02-25 17:27 vcerror 阅读(1000) 评论(0) 推荐(0)
摘要:A盾的原理是在驱动加载时重载os内核,获取原始ssdt表的地址。应用层点击查询的代码在文件A-ProtectView.cpp中,每种点击操作调用相应的query查询函数,在query函数里ReadFile。读操作的Handle是A盾自定义的操作码,类似DeviceIoControl的控制码,比如ha... 阅读全文
posted @ 2014-02-24 15:19 vcerror 阅读(1008) 评论(0) 推荐(0)
摘要:本帖最后由 shulun743 于 2014-1-24 12:27 编辑主要说32位系统:挂钩方式,现在常用的就是挂钩ssdt,shadown ssdt,inline hook挂钩文件系统过滤驱动和HOOK NT!KiFastCallEntry!不具体讨论HOOK和INLINE HOOK的区别了!就... 阅读全文
posted @ 2014-02-24 15:08 vcerror 阅读(237) 评论(0) 推荐(0)
摘要:在Windows内核中有一个活动进程链表AcvtivePeorecssList。它是一个双向链表,保存着系统中所有进程的EPROCESS结构。特别地,进程的EPROCESS结构包含一个具有指针成员FLINK和BLINK的LIST_ENTRY结构,这两个指针分别指向当前进程的前方和后方进程。当某些模块... 阅读全文
posted @ 2014-02-21 18:08 vcerror 阅读(354) 评论(0) 推荐(0)
摘要:本来按照这个来做,能跑通helloworld,可是复杂的驱动就会出错....不知道什么原因,后来就直接用命令行来编译的。------------------------------------------------------------------------------------------... 阅读全文
posted @ 2014-02-08 11:08 vcerror 阅读(1051) 评论(0) 推荐(0)
摘要:对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向只读页面执行写操作;当该位复位时则反之。因此,在写前把设置该位就可以climov eax, cr0and eax, -65537 ... 阅读全文
posted @ 2013-08-17 16:07 vcerror 阅读(415) 评论(0) 推荐(0)
摘要:SSDT即System Service Dispath Table,它是一个表,这个表中有内核调用的函数地址。KeServiceDescriptorTable:是由内核(Ntoskrnl.exe)导出的一个表,这个表是访问SSDT的关键,具体结构是typedef struct ServiceDesc... 阅读全文
posted @ 2013-08-17 15:00 vcerror 阅读(252) 评论(0) 推荐(0)