摘要: 1. 概述从 windows xp 和 windows 2003 开始使用了快速切入内核的方式提供系统服务例程的调用。KiFastCallEntry() 的实现是直接使用汇编语言,C 语言不能直接表达某些操作。我从 windows 2003 里反汇编出来,写成 C 伪码形式,点击这里察看:KiFas... 阅读全文
posted @ 2014-02-28 15:21 vcerror 阅读(854) 评论(0) 推荐(0) 编辑
摘要: DDK下build -c错误:error U1087: cannot have : and :: dependents for same target被build的source code所在path不能含有空格. 阅读全文
posted @ 2014-02-28 11:15 vcerror 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 1. 概述windows 提供了一种基于 lookaside list 的快速内存分配方案,区别于一般的使用 ExAllocatePoolWithTag() 系列函数的内存分配方式。每次从 lookaside list 里分配 fixed size 的内存。 系统构建两个条 lookaside 链表... 阅读全文
posted @ 2014-02-28 10:31 vcerror 阅读(641) 评论(1) 推荐(0) 编辑
摘要: 1.检查内存可用性在驱动程序开发中,对内存的操作要格外小心。如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃。DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的情况下,试探这段内存的可读写性。VOIDProbeForRead(INCONSTVOID*Address,INSIZ... 阅读全文
posted @ 2014-02-28 10:24 vcerror 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 1.Lookaside结构频繁的申请和回收内存,会导致在内存上产生大量的内存“空洞”,从而导致最终无法申请内存。DDK为程序员提供了Lookaside结构来解决这个问题。我们可以将Lookaside对象看成是一个内存容器。在初始化的时候,它先向Windows申请了一块比较大的内存。以后程序员每次申请... 阅读全文
posted @ 2014-02-28 10:23 vcerror 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 1.分配内核内存Windows驱动程序使用的内存资源非常珍贵,分配内存时要尽量节约。和应用程序一样,局部变量是存放在栈空间中的。但栈空间不会像应用程序那么大,所以驱动程序不适合递归调用或者局部变量是大型数据结构。如果需要大型数据结构,我们可以在堆中申请。堆中申请的函数有以下几个:(1)PVOIDEx... 阅读全文
posted @ 2014-02-28 10:23 vcerror 阅读(471) 评论(0) 推荐(0) 编辑