Visual studio 2008+DDK搭建驱动开发环境(一)
驱动开发对这里的很多新人都具有很强的吸引力,相信很多人都还没来得及在Windows平台下写出一个内核态的Hello Word,也许是正处于理论学习阶段还没有着手实践,也许是想实践但是却一直徘徊在起点。说到驱动开发的起点,当然包括很多方面:编程能力,内核架构的了解,少量硬件知识等等。但是这篇文章不会介绍这些东西,今天只讲真正的起点—开发环境的搭建,希望能让所有在这个真正的起点上遇到问题的人都能顺路走上驱动开发的实践之路。
本人的机器环境:32位Intel CPU,32位 Windows7系统,系统的位数决定了编译过程中使用的一些可执行文件版本。
准备软件:Visual Studio 2008 安装包和Window Driver Devlopment Kits(DDK)—仅此两项。注意这里只选择了VS2008,低版本和高版本没有搭建过,所以不确定本文方法试用,DDK的版本我用的是7600.16385.1。
第一步:安装Visula Studio 2008,路径随意,最好不要放在系统分区下,常识。
还有两点需要提醒下,首先Visual studio集成了很多开发功能,可是如果你的专业方向够单一,就把多余的去掉吧,像我的只选择了VC++这个组件,什么VB,C#,Web,SQL都没有安装,节省空间,加快VS启动速度。其次建议安装完整的本地MSDN(作为一个Windows开发者,如果连一个Windows API的返回值都搞不清,是该说他不敬业呢,还是不专业呢?工作中经常看到这种情况,最滥用的一个就是INVALID_HANDLE_VALUE。既然这个事说了,那我就补充点小插曲,工作中看到有很多代码比如获取一个进程或线程的句柄,然后拿返回值和INVLAID_HANDLE_VALUE进行比较来判断成功与否。进程和线程句柄有两个特殊值,-1:当前进程,-2:当前线程,如果你用GetCurrentProcess的值和INVALID_HANDLE_VALUE来进行比较,那就悲剧了。小知识:IVALID_HANDLE_VALUE是16位Windows系统时候的遗留物,在如今的32位或者64位Windows下除了常用的CreateFile和少数其他句柄相关API会返回该值外,其他句柄操作都用NULL来进行判断。)
第二步:安装Windows DDK,路径随意,同上不要放在系统分区下。
同样需要提醒下,安装过程去掉不需要的组件。这里想介绍一下DDK的目录结构和用途。
DDK安装完成之后目录下一般是一个版本号,在版本号目录下才是很多子目录,重要的有这几个:bin,inc,lib。
bin:该目录中放置的是一些编译链接工具。其下又有子目录x86,ia64,amd64等,IA64在本文中不会进行任何介绍,因为一般开发者基本不会接触到这个纯的64位架构。
bin\x86:该目录下存放的都是32位程序,其中包含的都是编译器和链接器,在这个目录下又存在x86,ia64,amd64文件夹,这些目录就是用于交叉编译的。
bin\x86\x86:存放有cl和link等,用于编译链接运行于32位系统下的目标程序
bin\x86\amd64:存放有cl和link等,用于编译链接运行于64位系统下的目标程序
bin\amd64:该目录下存放的都是64位程序,只能运行于64位系统中,这些程序只是一些签名和证书的工具,如果你的系统是64位并且需要进行这些操作,那就使用他们吧。
inc:该目录下存放的是编译期间使用的头文件
lib:该目录下存放的是链接期间使用的lib文件,其中有atl,mfc,crt,和wdm是同用的,而剩下的几个目录则是针对你要编译的驱动运行的系统选择一个使用的。其对应关系如下
lib\wxp:用于链接运行于Windows XP下的驱动程序
lib\wlh:用于链接运行于Windows Vista and Windows Server 2008下的驱动程序
lib\wnet:用于链接运行于Windows Server 2003下的驱动程序
lib\win7:用于链接运行于Windows 7下的驱动程序
而以上目录下又会有i386,amd64,ia64文件夹,
以上两步都成功完成,为了方便后续行文,我把以上两个安装路径给出来,在我的机器上路径如下:
VS 2008:F:\Program Files\Microsoft Visual Studio 9.0
WinDDK:F:\WinDDK
在活动解决方案配置下面下拉列表中选择新建,命名为wxp-i386-Checked,其他选项参照下图,这里我们是要配置一个Checked编译,在驱动编程中Checked相当于应用程序的Debug版本,Free相当于应用程序的Release版本,不好意思手误,下图中所有的checked写成了cheched了: D