整合Visual C++和WDK7:Step by step

[首发于cnblogs,转载请注明:作者:byeyear/告别年代    Email: east3@163.com]

用惯了IDE,赶脚WDK7的build过程真心操蛋啊~~~

下面就来看看如何整合Visual C++和WDK7吧。原创作品。

以Visual C++ 2008 Express和WDK7600为例。

1. 启动Visual C++ 2008,新建一个Makefile project

image

Project name我们填上toaster,我们后面将把WDK的toaster例子文件加进来

Solution Name我们填上wdk_sample。

image

2. 在后续的对话框中,全部内容使用默认值。

3. 将wdk中的toaster例子文件复制到工程目录(wdk_sample\toaster),并添加到project中:

image

makefile,makefile.inc,sources和toaster.c:在WinDDK\7600.16385.1\src\general\toaster\kmdf\func\simple

toaster.h:在WinDDK\7600.16385.1\src\general\toaster\kmdf\func\shared

driver.h和public.h:在WinDDK\7600.16385.1\src\general\toaster\kmdf\inc

4. 修改一下toaster.h文件中的包含文件路径:

image

将driver.h和public.h两行修改为:

image

5. 打开Configuration Manager:

image

6. 新建一个configuration:

Name:xp_x86_free

Copy settings from: Debug

image

单击确定。

7. 在Active solution configuration下拉列表中选择Edit,将Debug和Release配置删除:

image

image

image

8. 编辑项目属性:

项目属性对话框中,左侧选择NMake:
image

右侧单击Build Commd Line编辑框右侧的小方块,弹出编辑框:

image

展开Macro:

image

好,现在到关键时刻了:

9. “开始”菜单 –> Windows Driver Kit –> WDK 7600 –> Build Enviroment –> Windows XP –> x86 free build:

在这个菜单项上单击右键,选择“属性”,选择“快捷方式”选项卡:

image

选中“目标”编辑框中的内容,按Ctrl+C或单击右键选“复制”,将该编辑框内的内容复制到剪贴板。

10. 回到步骤8中Build Command Line编辑框,输入“call ”(call后有个空格),然后按Ctrl+V将剪贴板中的内容复制进来,并删除从C:\WINDOWS开始到cmd.exe /k之间的内容:

删除之前是这样:

image

删除后:

image

11. 按回车换行,输入:“cd /D ”(D后面有个空格)

12. 在macro展开列表中选择InputDir,单击Insert按钮:

image

13. 现在Command Line编辑框应该像这样:

image

14. 继续在上述编辑框中起一新行,输入:build

image

15. 单击OK,回到项目属性对话框。继续编辑Rebuild All Command Line:

除了最后一行输入build /c外,其余和上一步中的command line一致,你可以直接复制过来修改:

image

16. 现在可以回到VS主界面,Build一下试试:

1>  
1>   .\toaster.c
1>toaster.c
1>Linking Executable - objfre_wxp_x86\i386\wdfsimple.sys
1>Microsoft (R) Incremental Linker Version 9.00.30729.207
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>/MERGE:_PAGE=PAGE
1>/MERGE:_TEXT=.text
1>/SECTION:INIT,d
1>/OPT:REF
1>/OPT:ICF
1>/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221
1>/INCREMENTAL:NO
1>/release
1>/NODEFAULTLIB
1>/WX
1>/debug
1>/debugtype:cv,fixup,pdata
1>/version:6.1
1>/osversion:6.1
1>/functionpadmin:5
1>/safeseh
1>/pdbcompress
1>/STACK:0x40000,0x1000
1>/driver
1>/base:0x10000
1>/align:0x80 /stub:d:\winddk\7600.16385.1\lib\wxp\stub512.com
1>/subsystem:native,5.01
1>/entry:FxDriverEntry@8
1>/out:e:\works\wdk\wdk_sample\toaster\objfre_wxp_x86\i386\wdfsimple.sys
1>e:\works\wdk\wdk_sample\toaster\objfre_wxp_x86\i386\toaster.obj
1>d:\winddk\7600.16385.1\lib\wxp\i386\BufferOverflowK.lib
1>d:\winddk\7600.16385.1\lib\wxp\i386\ntoskrnl.lib
1>d:\winddk\7600.16385.1\lib\wxp\i386\hal.lib
1>d:\winddk\7600.16385.1\lib\wxp\i386\wmilib.lib
1>D:\WinDDK\7600.16385.1\lib\wdf\kmdf\i386\1.9\WdfLdr.lib
1>D:\WinDDK\7600.16385.1\lib\wdf\kmdf\i386\1.9\WdfDriverEntry.lib
1>d:\winddk\7600.16385.1\lib\wxp\i386\sehupd.lib
1>BUILD: Finish time: Fri Oct 12 20:52:51 2012
1>BUILD: Done
1>    1 file compiled - 3 Warnings
1>    1 executable built
1>Build log was saved at "file://e:\works\wdk\wdk_sample\toaster\xp_x86_free\BuildLog.htm"
1>toaster - 0 error(s), 0 warning(s)

看一下工程目录内,多了个objfre_wxp_x86目录。点开看看:

image

啊哈,大功告成了。

17. 你可以用同样的方法把其他Build Enviroment都加到Configuration Manager里去。比如我又加了一个xp_x86_checked。

image

可以用同样的方法加入WDK所支持的所有Build Enviroment。

18. 该方法目前的缺点:

    加入新文件时,需要:1. 编辑sources文件 2. 将文件加入Solution Explorer;

    只能在工程文件内部Go Declaration,没有办法Go Declaration到DDK/WDF的结构或函数

19. 若您有更好的方法,或认为有改进余地,欢迎留言或Email我。

原文地址:https://www.cnblogs.com/byeyear/p/2721921.html