————————————————————————————————————————————————————————————————————————————————————————
本篇开始进行真枪实弹的调试,本文的最后会附上完整的源码包,方便各位在自己的机器上演练。
如果安装了 Windows Driver Kits,在“开始”->“所有程序”中选择类似“WDK 7600.16385.1”的项目。具体的数字取决于你
安装的 WDK 开发环境版本而定。然后选择“Build Environments”下面的操作系统版本,
亦即你编译出来的驱动要运行其上的 OS 版本,接着选择硬件平台体系结构与构建类型,比如“x86 Checked Build
Environment”是用于 32 位平台,且附带生成包含调试符号文件的构建环境。
调试符号文件有助于调试器显示驱动二进制文件中的函数,变量,常量名称等信息,生成人性化的输出。
这样会创建一个特殊的 cmd.exe 进程,它的环境变量预配置好了各种构建相关的参数,比如头文件,库文件的位置;编译器,汇编
器,链接器程序所在路径。。。等等。
我们在该 cmd 窗口中切换到源码包的解压目录,然后执行如下命令:
build /D /g /b /B /e /F /S /s /$ /why /v /w /y
这些指定的参数让你能查看详细的构建过程,比如预处理器解析头文件的嵌套包含过程,给出可能的警告或错误提示。
下面是一个样例输出,对于排除过程中出现的问题很有用:
D:\kmdsource_use_mdl_mapping_ssdt>build /D /g /b /B /e /F /S /s /$ /why /v /w /y BUILD: Compile and Link for x86 BUILD: Loading d:\winddk\7600.16385.1\build.dat... BUILD: Computing Include file dependencies: Scanning d:\winddk\7600.16385.1\inc\api Scanning d:\winddk\7600.16385.1\inc\ddk BUILD: Start time: Mon Jan 29 14:08:34 2018 Scanning d:\kmdsource_use_mdl_mapping_ssdt Scanning d:\winddk\7600.16385.1\inc\crt BUILD: Examining d:\kmdsource_use_mdl_mapping_ssdt directory for files to compile. d:\kmdsource_use_mdl_mapping_ssdt Invalidating OACR warning log for 'root:x86chk' 0x00000001-0x00000001/0x00000001 usemdlmappingssdt.c ntddk.h d:\winddk\7600.16385.1\inc\ddk 0x00000002-0x00000001/0x00000001 usemdlmappingssdt.c wdm.h d:\winddk\7600.16385.1\inc\ddk 0x00000003-0x00000001/0x00000001 usemdlmappingssdt.c excpt.h d:\winddk\7600.16385.1\inc\crt 0x00000004-0x00000001/0x00000001 usemdlmappingssdt.c crtdefs.h d:\winddk\7600.16385.1\inc\crt 0x00000005-0x00000001/0x00000001 usemdlmappingssdt.c specstrings.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c sal_supp.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c specstrings_supp.h d:\winddk\7600.16385.1\inc\api 0x00000007-0x00000001/0x00000001 usemdlmappingssdt.c sal_supp.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c sal.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c specstrings_strict.h d:\winddk\7600.16385.1\inc\api 0x00000007-0x00000001/0x00000001 usemdlmappingssdt.c specstrings_undef.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c driverspecs.h d:\winddk\7600.16385.1\inc\api 0x00000007-0x00000001/0x00000001 usemdlmappingssdt.c specstrings.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c sal_supp.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c specstrings_supp.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c sal.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c specstrings_strict.h d:\winddk\7600.16385.1\inc\api 0x00000006-0x00000001/0x00000001 usemdlmappingssdt.c sdv_driverspecs.h d:\winddk\7600.16385.1\inc\api 0x00000003-0x00000001/0x00000001 usemdlmappingssdt.c ntdef.h d:\winddk\7600.16385.1\inc\api 0x00000004-0x00000001/0x00000001 usem