【 tulaoshi.com - C语言心得技巧 】
编译设备驱动程序的方法 安装DDK后,在DDK程序组下有Check和Free两个编译环境,Check环境用于编译带调试信息的驱动程序,Free则是编译正式发布版本的环境。通常情况下设备驱动程序的编译采用命令行的方式。通过一定的设置可以在VC ++的集成环境下编译。
一般来说,成功编译一个最基本的设备驱动程序需要四个文件,第一个是驱动程序,即C语言源程序文件(例如vdisk.c,注意下面所有的例子都是以vdisk来说明);第二个是RC文件(例如vdisk.rc);第三个是sources文件;第四个文件是makefile.rc文件。sources文件和make文件类似,用来指定需要编译的文件以及需要连接的库文件。这三个辅助文件都很简单,在DDK samples的每个例程里都有三个这样的文件,依样画瓢就能理解它们的结构和意义。
1.举例分析
以下以vdisk程序为例,设vdisk.rc代码为:
/vdisk.rc/
#include
#include
#define VER_FILETYPE VFT_DRV
#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
#define VER_FILEDESCRIPTION_STR "SCSI VDisk Driver"
#define VER_INTERNALNAME_STR "vdisk.sys"
#define VER_ORIGINALFILENAME_STR "vdisk.sys"
#include "common.ver"
/end of vdisk.rc/
设备驱动程序一般都使用Build实用程序来进行,Build只是NMAKE外面的一个外包装程序。Build本身其实相当简单,编译的大部分工作实际上由Build传递给NMAKE来进行。
/SOURCES/
TARGETNAME=vdisk
TARGETTYPE=DRIVER
TARGETPATH=$(BASEDIR)lib
TARGETLIBS=$(BASEDIR)lib$(DDKBUILDENV)scsiport.lib
INCLUDES=....inc
SOURCES=vdisk.c vdisk.rc
/end of SOURCES/
注意SOURCES的文件名没有任何扩展名。
# makefile
#
# DO NOT EDIT THIS FILE!!! Edit .sources. if you want to add a new source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
!INCLUDE $(NTMAKEENV)makefile.def
# end of makefile
对所有驱动程序而言,makefile都是一样的,Microsoft也警告不要编辑这个文件,如果需要,可以编辑修改sources文件达到同样的效果。对于设备驱动程序,所使用的C编译器基本上无一例外地选用VC++。
2.编译的基本步骤
(1)首先进入check或free编译环境,初始化DDK编译环境。
(2)运行VC安装目录下bin目录下的vcvars32.bat,初始化VC++编译环境。
(3)运行Build.exe进行编译。
■设备驱动程序的安装和启动
1.添加注册表中的键值
Windows NT在引导的时候,通过扫描注册表构造驱动程序列表。这个列表既包括自启动的驱动程序,也包括需要手工启动的驱动程序。这个列表其实就是控制面板中设备Applet所列出来的所有设备。所有的设备驱动程序应该在注册表的HKEY_LOCAL_MACHINESystemCurrentControl-
SetServices下有相应的键值。下面以vdisk为例来说明如何添加键值:
首先在HKEY_LOCAL_MACHINE System Current ControlSetServices下添加一个子项vdisk,注意这里的名称应该和你的驱动程序名称一致。例如驱动程序名称是vdisk.sys,那么这里的子项名称就是vdisk。然后在vdisk下添加以下键值:
名称数据类型说明TypeREG_DWORD驱动程序的种类StartREG_DWORD驱动程序的起始启动时间ErrorControlREG_DWORD<