如何为编译驱动程序配置 Visual Studio 2008






3.42/5 (22投票s)
如何在不使用DDK控制台工具的情况下配置Visual Studio 2008来编译驱动程序。
介绍
众所周知,微软官方不支持DDK与Visual Studio(任何版本)的集成。因此,我们可以使用Visual Studio编辑器(或任何其他文本编辑器)来开发驱动程序的源代码,但编译需要使用DDK构建工具。当然,这很不方便,因为我们必须始终在编辑器和控制台窗口之间切换,但最糟糕的是,开发人员必须花费大量时间在编辑器中查找错误行。
背景
有几种方法可以使用Visual Studio编译驱动程序。你可以在Mark Roddy的优秀文章Windows Driver Build Methods and Tools中找到大部分方法。
Mark提供了一些第三方工具。这很好,但我将展示一种更便捷的方法(依我拙见):如何配置和使用Visual Studio编译驱动程序。
玩得开心
-
设置Visual Studio 2008。
-
设置DDK (WDK)。
-
将DDK包含文件、库和bin添加到VS路径。
-
创建一个新的空“Win32项目”并添加源文件(例如,HelloWorld.c)。
-
配置项目属性(所有配置)
- C/C++ - 常规 - 调试信息格式 = 程序数据库 (/Zi)
- C/C++ - 预处理器 - 预处理器定义 = _X86_ [调试配置中也添加DBG]
- C/C++ - 代码生成 - 启用C++异常 = 否
- C/C++ - 代码生成 - 基本运行时检查 = 默认值
- C/C++ - 代码生成 - 缓冲区安全检查 = 否 (/GS-)
- C/C++ - 高级 - 调用约定 = __stdcall (/Gz)
- C/C++ - 高级 - 编译为 = 编译为C代码 (/TC) [如果你打算使用纯C]
- 链接器 - 常规 - 输出文件 = $(OutDir)\$(ProjectName).sys
- 链接器 - 常规 - 启用增量链接 = 默认值
- 链接器 - 输入 - 附加依赖项 = ntoskrnl.lib hal.lib $(NOINHERIT) [在此处添加所需的库,例如 ntoskrnl.lib hal.lib]
- 链接器 - 输入 - 忽略所有默认库 = 是 (/NODEFAULTLIB)
- 链接器 - 清单文件 - 生成清单 = 否
- 链接器 - 系统 - 子系统 = 本机 (/SUBSYSTEM:NATIVE)
- 链接器 - 系统 - 驱动程序 = 驱动程序 (/DRIVER)
- 链接器 - 高级 - 入口点 = DriverEntry
- 链接器 - 高级 - 基址 = 0x10000
- 链接器 - 高级 - 随机基址 = 禁用 (/DYNAMICBASE:NO)
- 链接器 - 高级 - 数据执行保护 (DEP) = 禁用 (/NXCOMPAT:NO)
-
好了。完成了。现在你可以使用简单的代码进行测试,例如:
#include "ntddk.h" NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath) { return STATUS_UNSUCCESSFUL; }
兴趣点
Visual Studio + DDK - 太棒了!:)
历史
- 2008年12月18日:首次发布