在此下载:/Files/aurain/ddkvs2005build.doc DDK版本:Windows DDK 3790 IDE:Visual Studio 2005 二 用DDK环境编译驱动 这种编译驱动的办法是DDK文档中所提倡的办法。此种方法需要编写一个编译脚本文件,在这个脚本中描述了DDK驱动程序的源文件、用到的lib文件和include路径名、编译输出的目录和文件名等信息。编写此类脚本对于Windows程序员可能比较陌生,尤其是当源文件较多时,编写脚本文件可能显得更如麻烦。在源程序的相同目录下创建两个文件makefile和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 Sources这个文件参考实际情况修改 !if "$(DDK_TARGET_OS)"=="Win2K" TARGETNAME=Passthru_2000 !elseif "$(DDK_TARGET_OS)"=="WinXP" TARGETNAME= Passthru _XP !elseif "$(DDK_TARGET_OS)"=="WinNET" TARGETNAME= Passthru _03Server !endif TARGETPATH=obj TARGETTYPE=DRIVER C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS_WDM=1 !if !defined(DDK_TARGET_OS) || "$(DDK_TARGET_OS)"=="Win2K" # # The driver is built in the Win2K build environment # C_DEFINES=$(C_DEFINES) -DNDIS40_MINIPORT=1 C_DEFINES=$(C_DEFINES) -DNDIS40=1 !else # # The driver is built in the XP or .NET build environment # So let us build NDIS 5.1 version. # C_DEFINES=$(C_DEFINES) -DNDIS51_MINIPORT=1 C_DEFINES=$(C_DEFINES) -DNDIS51=1 !endif # Uncomment the following to build for Win98/SE/WinMe # This causes several APIs that are not present in Win9X to be # ifdef'ed out. # C_DEFINES=$(C_DEFINES) -DWIN9X=1 PRECOMPILED_INCLUDE=precomp.h PRECOMPILED_PCH=precomp.pch PRECOMPILED_OBJ=precomp.obj !if !defined(DDK_TARGET_OS) || "$(DDK_TARGET_OS)"=="Win2K" TARGETLIBS=$(DDK_LIB_PATH)\ndis.lib \ $(DDK_LIB_PATH)\ntstrsafe.lib !else TARGETLIBS=$(DDK_LIB_PATH)\ndis.lib !endif USE_MAPSYM=1 INCLUDES= SOURCES=\ miniport.c \ passthru.c \ passthru.rc \ protocol.c \ PTEXTEND.C \ filter.c 前7行说明此驱动的名称,这里用到了宏来控制不同操作系统版本的编译所需的文件,$(DDK_TARGET_OS)是从外面的命令行传递进来的。 TARGETLIBS是编译时要链接的库 三 用IDE环境编译驱动 首先准备一个脚本(我这里命名为MakeDrv.bat),内容如下: @echo off rem ----------------------------------------------------------- rem usage: rem MakeDrv.bat [<fre | chk>] [<WXP | WNET | W2K>] rem ----------------------------------------------------------- if exist *.sys set DDKOPT=%1 if "%DDKOPT%" == "" set DDKOPT=fre set DDKOS=%2 if "%DDKOS%" == "" set DDKOS=WXP pushd . if not exist c:\winddk\bin\setenv.bat goto SetenvNotFound call c:\winddk\bin\setenv.bat c:\winddk %DDKOPT% %DDKOS% popd if not exist c:\winddk\bin\x86\build.exe goto NoBuildExe c:\winddk\bin\x86\build.exe if "%DDKOPT%" == "chk" goto :CopyChecked if "%DDKOPT%" == "fre" goto :CopyFree goto exit :CopyChecked if "%DDKOS%" == "WXP" ( if exist .\objchk_wxp_x86\i386\*.sys move .\objchk_wxp_x86\i386\*.sys .\Debug\ ) if "%DDKOS%" == "WNET" ( if exist .\objchk_wnet_x86\i386\*.sys move .\objchk_wnet_x86\i386\*.sys .\Debug\ ) if "%DDKOS%" == "W2K" ( if exist .\objchk_w2k_x86\i386\*.sys move .\objchk_w2k_x86\i386\*.sys .\Debug\ ) goto exit :CopyFree if "%DDKOS%" == "WXP" ( if exist .\objfre_wxp_x86\i386\*.sys move .\objfre_wxp_x86\i386\*.sys .\Release\ ) if "%DDKOS%" == "WNET" ( if exist .\objfre_wnet_x86\i386\*.sys move .\objfre_wnet_x86\i386\*.sys .\Release\ ) if "%DDKOS%" == "W2K" ( if exist .\objfre_w2k_x86\i386\*.sys move .\objfre_w2k_x86\i386\*.sys .\Release\ ) goto exit :SetenvNotFound echo Can't found Setenv.bat. goto exit :NoBuildExe echo Can't found build.exe goto exit :exit pause 把MakeDrv.bat拷到驱动源目录下(与源文件同目录) 说明: 1. c:\winddk\bin\setenv.bat,这个是驱动自带的,c:\winddk是我驱动安装目录(需要根据实际情况配置),你也可以设置环境变量。 2. 这个脚本的实质还是调用驱动自带的build.exe来编译,只不过在这里我们把需要的参数封装了下。 3. 编译完毕后,我们会把生成的sys文件拷贝到Debug或Release目录,中间文件还是放在类似objfre_w2k_x86\i386这种目录下。 现在打开VS2005,新建一个makefile项目(中文版的叫“生成文件项目”,在vc++——常规)下,保证解决方案同源码及MakeDrv.bat处于同一目录。 在向导的“设置调试配置”中,如下图所示填写:
在“设置发布配置”,不要选择“与调试配置相同”,如下图所示填写:
单击“完成”,便新建了一个工程(当然是空的),你可以把已有的代码添加进来,编译后就会生成驱动文件了。 用IDE可以快速定位错误,以后编辑也很方便,默认是编译xp checked版本的驱动,你可以通过项目的配置里(项目-项目属性),选择“配置熟悉”-NMake,生成命令行修改一下,如希望生成2003 fre版本的驱动,则改成MakeDrv.bat fre WNET。 以上是两种介绍编译驱动的方法,原理都是调用DDK自带的工具的了,大家应该可以快速的构建自己的编译环境,有什么不懂我们可以再讨论。 下面介绍第三种方法,是“Windows驱动开发技术详解”中介绍的,摘抄如下:(希望没侵犯版权^_^) 用VC集成开发环境编译HelloDDK(1)
选择C/C++选项卡,将原有的Project Options内容全部删除,替换成如下内容,如图1-11所示。
选择Link选项卡,将原有的Project Options内容全部删除,替换成如下内容,如图1-12所示。
(5)修改VC的lib目录和include目录。在VC中选择“Tools”|“Options”,在弹出的对话框中选择“Directories”选项卡。在“Show directories for”下拉菜单中选择“Include files”菜单。添加“D:\WINDDK\2600.1106\INC\W2K”和“D:\WINDDK\2600.1106\INC\DDK\W2K”,并将这两个目录置于最上,如图1-13(a)所示。读者可将“D:\WINDDK\
在“Show directories for”下拉菜单中选择“Library files”菜单,添加目录“D:\WINDDK\ 2600.1106\LIB\W2K\I |
|
来自: iceberg_horn > 《windows》