对 Windows驱动开发技术详解 第三章的(Windows 驱动编译环境配置,安装及调试)自我理解
BY:ALALMN—飞龙 QQ:316118740 BLOG:http://hi.baidu.com/alalmn
这章主要讲软件调试和NT式和WDM式 驱动 加载方式
NT式和WDM式 驱动 加载
NT式驱动采用服务加载就可以了
WDM式驱动采用INF文件加载
DDK
Checked 可以查看到调试信息 调试版
Free 不可以查看到调试信息 发布版
VC++
Release 不可以查看调试信息
Debug 可以查看调试信息
调试信息
kdPrint(("enter hello/n"));
kdPrint(("%senter hello/n",abc));
使用DbgView就可以看到调试信息了(好像还有很多这样的软件吧)
建立驱动程序工程
工程设置—C/C++—工程 选项—
/nologo /Gz /MLd /W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1 /Fo"MyDriver_Check/"
/Fd"MyDriver_Check/" /FD /c
/nologo 代表不显示编译的版权信息
/Gz 默认函数调用采用标准调用(_stdcall)
/MLd
/W3 采用第三级的警告模式
/WX 将警告信息变成错误信息,最大程度保证了代码的可靠性
/Z7 用Z7模式产生调试信息。VC默认的Program Database for"Edit & Continue",这个和link的/driver选项冲突
/Od 关闭调试模式。驱动程序不需要像Win32程序那样的VC调试器调试,而需要用内核调试器调试
/D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1 定义一些宏,这些是必须的。
/Fo"MyDriver_Check/" 设置中间生成的目标代码的路径
/Fd"MyDriver_Check/" 设置pdb文件的目录位置,pdb文件中包含了大量的符号,这是调试驱动时候必须的
/FD 生成文件依赖
/c 只进行编译,而不连接
工程设置—链接—工程 选项—
ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console
/incremental:no /pdb:"MyDriver_Check/HelloDDK.pdb" /debug /machine:I386 /nodefaultlib
/out:"MyDriver_Check/HelloDDK.sys" /pdbtype:sept /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078
ntoskrnl.lib NT驱动程序需要连接此库。如果是WDM驱动程序,则需要连接wdm.lib
/nologo 连接时不显示版本信息
/base:"0x10000" 加载驱动时,设定加载在虚拟内存中的位置
/stack:0x400000,0x1000 设顶函数使用堆栰的大小
/entry:"DriverEntry" 入口函数的地址,此函数必须是符号标准函数调用的。
/subsystem:console 设置子系统
/incremental:no 非递增式的链接
/pdb:"MyDriver_Check/HelloDDK.pdb" 设置pdb文件的文件名
/debug 以debug方式连接
/machine:I386 产生代码是386兼容平台的
/nodefaultlib 不是用默认的库
/out:"MyDriver_Check/HelloDDK.sys" 输出二进制代码的名称
/pdbtype:sept 设置pdb文件类型
/subsystem:native 子系统是内核系统
/driver 编译驱动
/SECTION:INIT,D 将INIT的段设置为可抛弃的
/RELEASE
/IGNORE:4078 忽略4078号警告错误
ddk Windows 驱动编译环境配置,安装及调试
最新推荐文章于 2025-08-15 13:27:42 发布