系列简介:
编写这个系列的原因,是一些刚刚开始编写windows驱动的同事经常问我: 为什么每次看我的代码都很少,但是功能很全面,也没有那么多蓝屏,大家都是参考类似的资料,为什么差别就那么大?一开始我总是试图指出对方的问题,但是后面发现这远远不足以解决。
按照常理,一个 windows 驱动可能只有几千到几万行代码,这个代码量意味着驱动不会也不可能很复杂,但问题在于,驱动程序往往作为系统的子系统运行,故与它相关联的代码可能有百万或者千万级,这是一个系统工程的一部分子集,而不是一个独立的工程。
QT这样的软件系统可谓风靡一时,它的设计思路中一开始就回避了关于系统中那些程序运行的本质,相当于在原有的SDK之上封装了一层纯软件的概念,了解那些概念本身非常有用,但对于特定的系统运行角度,这些纯软件的概念可能就未必适用了。
在编程中,往往有两种观点,一种观点认为应该将程序的功能尽可能完善,尽可能易用,这会带来程序的结构复杂,一个程序的功能性也许非常简单,但与之匹配的易用性会做得很复杂;另一种观点则与之相反,程序的功能应该尽可能的简单,尽可能的高效,因为越简单的系统,稳定性越好。前者对于商业化软件来说非常必要,驱动程序是工业化软件,这一特点决定了驱动设计中的原则。
编写原则:
熟悉语言特性
编写驱动之前,应该将C语言和C++语言的特性充分了解,很多初学编程的人往往是从一个个网上现成的例子开始学起的,这个过程中充斥着一些奇怪的习惯,就像下面的代码片段一样:
// 1. 中文命名源文件名称和头文件;