走过了VC++到驱动开发,回头看,才发现真是迂回曲折。今天,应一个朋友之邀,结合一个完整的例子,写一点驱动入门的东西,希望对初学者能有所帮助。为了更深入的学习驱动开发,我将用DDK 和Compuware DriverStudio V3.2两种方法来构建这个例子。
我也只是入门,理解也未必正确,有错误的地方望多多指教。有问题欢迎与我联系。邮箱为[email protected], QQ为35777618。对于这本教程,您可以免费获得。如果需要转载,请保证其完整性。另外,不得剽窃任何内容作为任何赢利出版物的全部或者部分。
一. 驱动开发环境搭建
系统平台:WinXP
开发环境:VC6.0 + XPDDK
1. 序言
过去驱动程序的编译、调试都是在CMD命令行进行的,这多少有些不便。对此,网上有不少朋友总结了在VC6.0的IDE环境下进行驱动程序的开发,大大方便了用DDK进行驱动开发的步骤,这里我再来详细说一下用VC6.0来集成驱动的开发环境,至于命令行的方式,有兴趣的朋友可以参看我的另一篇文章:
2. 详细步骤
2.1 创建一个目录DriverDev(目录名随意),作为你开发驱动的大本营 。然后添加两个用户环境变量,一个是DDKROOT,他的值应该是你所安装DDK的根目录。(比如在安装DDK时安装到了d:\WINDDK\2600,那么 DDKROOT的值应该为d:\WINDDK\2600),另外一个变量是WORKPATH,这个变量的值就应该是你第一步所创建的驱动工程目录的路径。(若按本文,WORKPATH的值应该是D:\DriverDevelop),这两个变量会在我们接下来的工程配置中要用到,当然既然是变量,他们的名称是随你的喜欢了
2.2 在D:\DriverDevelop下创建一个名称为DIRS的无扩展名的文件。用记事本打开它,写上 DIRS=Hello。Hello是你的驱动文件所在的文件夹名. 在该目录(D:\DriverDevelop\Hello)下创建一个批处理文件MakeDrvr.bat,内容如下:
@echo off
if "%1"=="" goto usage1
if "%3"=="" goto usage2
if not exist %1\bin\setenv.bat goto usage3
call %1\BIN\setenv %1 %4
%2
cd %3 去掉,这里有问题,否则提示找不到文件
build -b -w %5 %6 %7 %8
goto ok
:usage1
echo Error: the first parameter is NULL!
goto exit
:usage2
echo Error: the third parameter is NULL!
goto exit
:usage3
echo Error: %1\bin\setenv.bat not exist!
goto exit
:ok
echo MakeDriver %1 %2 %3 %4
:exit
简要说明:该批处理首先对传递的参数作一些检查,然后调用ddk的setenv命令设置环境变量,然后改变目录为源程序所在驱动器和目录,并最后调用build,-b保证显示完全的错误信息,-w保证在屏幕上输出警告,在vc ide里的output窗口中可以看到这些错误和警告。
2.3. 建立一个空白Makefile工程
选File的new菜单项,然后选project栏的makefile,然后输入路径,一路next下去即可,visual studio提供两种配置win32 debug和win32 release. 如下图:
2.4. 修改这两种配置
选project的settings菜单项win32 debug:
在Build Command Line一栏填入MakeDriver %DDKROOT% E: %WORKPATH% CHECKED
这里要特别注意你工作的盘符,即E:,一定不能错,否则的话,会一直编译WDM库,而不编译你的程序
在Rebuild all options一栏填入 -nmake /a
在output file一栏填入与sources文件中的TARGETNAME相同的文件名,这里是Hello.sys
如下图:
win32 release:
选project的settings菜单项win32 Release:
在Build Command Line一栏填入MakeDriver %DDKROOT% E: %WORKPATH% FREE
在Rebuild all options一栏填入 -nmake /a
在output file一栏填入与sources文件中的TARGETNAME相同的文件名,这里是Hello.sys 如下图:
可以新建,也可以添加,这和普通的win32开发一样。注意DDK开发驱动程序需要用C语言,不要使用C++. 这里需要先添加一个KeyLog.h文件和KeyLog.cpp文件。文件内容以后再添加。
2.6. 添加资源文件
选Project的Add to Project菜单的New菜单项即可,如下图:
2.7. 把makefile文件放入源程序目录
makefile 无扩展名的文件,内容总是一样,也可以直接从DDK源代码那里拷贝过来一个,内容如下:
#
# 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
2.8 创建一个sources文件,内容如下:
TARGETNAME=KeyLog //这是要生成的驱动程序.sys文件的名字
TARGETPATH=obj //
TARGETTYPE=DRIVER //驱动程序的类型,一般不变
INCLUDES=$(DDKROOT)\inc; $(DDKROOT)\inc\DDK //ddk包含文件路径,一般不变
TARGETLIBS=$(DDK_LIB_PATH)\usbd.lib \ $(DDK_LIB_PATH)\ntoskrnl.lib
SOURCES=KeyLog.c
2.9 至此,环境设置完毕,KeyLog.cpp 和 KeyLog.h 输入内容后,你可以按F7, build你的驱动程序了。
好了,今天就先到这里了,下次我将继续讲解驱动实现的详细内容。