VS12下开发wdk驱动,比较繁琐,要设置很多选项。本文在 win8 + visual studio2012 + wdk7600 下测试通过。
一. 项目属性配置
常规
目标文件扩展名:.sys // 必选
VC++目录
包含目录 C:\WinDDK\7600.16385.1\inc\wdf\kmdf\1.9 inc\ddk inc\crt inc\api
库目录 C:\WinDDK\7600.16385.1\lib\win7\i386 C:\WinDDK\7600.16385.1\lib\wdf\kmdf\i386\1.9
C/C++
优化
优化(禁用/Od) // 可选
预处理器
WIN32=100;_X86_=1;DBG=1 // 必选
代码生成
运行时库:多线程调试(/MTd) 或 多线程(/MT) // 建议选
缓冲区安全检查:否 //可选 (可避免出现 error LNK2001: 无法解析外部符号 __security_cookie)
高级
调用约定 __stdcall(/Gz) //必选
链接器
常规
启用增量链接:否(/INCREMENTAL:NO) //建议
输入
ntoskrnl.lib // NT式驱动
Hal.lib // HalXXX 函数
wdm.lib // WDM式驱动
wdmsec.lib
wmilib.lib // WmiXXX 函数
ndis.lib // NdisXXX函数
忽略所有默认库: 是 (/NODEFAULTLIB) //必选
清单文件:
生成清单文件 否 // 必选,注vs12下必选该选项才能编译成功
启用用户账户控制(UAC) 否 // 必选
不然会出现 fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”
系统
子系统: 控制台(/SUBSYSTEM:NAIVE) //必选
堆栈保留大小:4194304 //可选
堆栈提交大小: 4096 //可选
驱动程序: 驱动程序(/DRIVER) //必选
高级
入口点: DriverEntry //必选
目标计算机: MachineX86 (/MACHINE:X86) //可选
随机基址:清空 // 必选,否则会出现 fatal error LNK1295: “/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”
数据执行保护(DEP): 清空 //必选,否则会出现 fatal error LNK1295:“/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”
二. 编码
#include <ntddk.h> VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject) { KdPrint(("Enter DriverUnload\n")); KdPrint(("Leave DriverUnload\n")); } NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { NTSTATUS status; status = STATUS_SUCCESS; KdPrint(("Enter DriverEntry\n")); pDriverObject->DriverUnload = HelloDDKUnload; KdPrint(("DriverEntry end\n")); return status; }
三. 命令行编译
VS编译环境设置比较繁琐,可以直接编写makefile通过命令行编译。
在当前目录下准备 makefile 和 sources 两个文件。
#可直接从wdk安装目录拷贝,不要修改 !INCLUDE $(NTMAKEENV)\makefile.def !if $(FREEBUILD) MSC_WARNING_LEVEL=/W1 !else MSC_WARNING_LEVEL=/W3 !endif
TARGETNAME = hello TARGETTYPE = DRIVER TARGETPATH = x32 INCLUDES = .\ TARGETLIBS = $(DDK_LIB_PATH)\tdi.lib SOURCES = hello.c
从开始菜单调出编译命令行,%StartMenu%\Windows Driver Kits\WDK 7600.16385.1\Build Environments\Windows 7
WDK提供了intel,AMD等芯片的支持,可编译32位或64位驱动。checked为debug版本编译环境,free为release版本编译环境。
启动32位编译环境,运行 build -Cz 或 bld 命令,即可在x32 目录下生成 hello.sys。
相关推荐
本次关于“使用VS2012开发驱动程序”的分享由T. Roy带来。T. Roy拥有计算机工程硕士学位,并具备超过20年的系统软件开发经验。作为CodeMachine公司的创始人之一,他还是该领域的资深讲师、作者及咨询顾问。Code...
串口驱动是计算机与外部设备通信的重要组成部分,特别是在嵌入式系统开发和调试过程中,它起着桥梁的作用。本文将详细讲解"CP2012串口驱动"及其在使用中的关键知识点。 CP2012是Silicon Labs(芯科实验室)生产的一...
SQL Server 2012驱动可无缝集成到Eclipse、IntelliJ IDEA等开发环境中,方便开发和调试。 总之,SQL Server 2012驱动包是Java开发者与SQL Server数据库交互的重要桥梁,它提供了高效、安全的数据访问机制,并且...
wdk vs2012 驱动编程 win7下用vs2012驱动开发搭建
CP2012驱动USB模块是为连接和控制基于Silicon Labs...总之,CP2012驱动USB模块是与使用该芯片的USB设备通信的关键,理解和掌握其工作原理、安装方法以及常见问题的解决策略,对于开发和维护涉及CP2012的项目至关重要。
在IT行业中,开发硬件驱动程序是一项关键任务,它使得操作系统能够与硬件设备进行通信。本教程将重点关注在Visual Studio 2008和2012环境下配置驱动程序工程的过程。这两个版本的Visual Studio虽然在界面和一些功能...
win7 vs2012+wdk8.0 搭建wdf驱动开发环境,系统:win7 x64 工具:vs2012 + WDK8.0 插件:wdfcoinstaller.msi win7 vs2012+wdk8.0 pci驱动源码
标题中的“sqlserver驱动2012版”指的是SQL Server Native Client 2012,这是微软为SQL Server设计的一款数据库访问接口。SQL Server Native Client(简称SQLNCLI)是用于与SQL Server交互的一种客户端库,它包含了...
Java 开发工具包:5.0 和 6.0 受支持的 SQL Server 版本: Microsoft® SQL Server® 2012 Microsoft® SQL Server® 2008 R2 Microsoft® SQL Server® 2008 Microsoft® SQL Server® 2005 Microsoft® SQL ...
Linux系统中的CSI(Camera Serial Interface)设备驱动开发是嵌入式领域中一项关键的技术,尤其在智能手机、平板电脑以及各种物联网设备中,用于处理摄像头数据流。2012年是一个重要的时间点,那时Linux内核对CSI的...
在本项目中,“使用VS2012开发工具开发类似当当网电子商务网站”,开发者采用了一种基于微软的Visual Studio 2012 IDE的综合开发环境,利用其强大的功能来构建一个类似于当当网的在线图书销售平台。这个项目的核心...
Visual Studio 2012(Vs2012)不再内置水晶报表的开发组件,因此要在该版本中使用水晶报表,需要额外安装由SAP提供的组件。本篇文章主要介绍了如何在Vs2012中集成并使用水晶报表,包括组件下载、安装、报表数据源的...
1. **驱动兼容性**:VS2012默认支持的是.NET Framework 4.0,而MySQL Connector/NET 6.8.3是与.NET Framework 4.5及更高版本兼容的。因此,确保你的系统已经安装了.NET Framework 4.5或以上版本,否则需要升级或安装...
在Visual Studio 2012 (VS2012) 中,C++/CLI(也称为C++ CLR)是微软为.NET Framework提供的一种语言扩展,它允许开发人员使用C++语法来编写托管代码,与.NET环境无缝交互。然而,原生的VS2012安装并不包含直接创建...
经过漫长的开发和内部测试,驱动精灵2012 Beta1终于可以与大家见面了!新版驱动精灵2012,我们拥有诸多改进,下面我将一一为大家介绍。 全新界面,2012引擎 驱动精灵2012版本对界面进行了重新设计,界面更简洁,...
《Linux设备驱动开发详解:基于最新的Linux4.0内核配套光盘》一书由宋保华编写,针对Linux4.0内核进行了深入浅出的解析与实践指导。本书结合了理论与实践,旨在帮助读者掌握Linux设备驱动程序的设计与开发技能。 ##...
虽然VS2012主要是为应用程序开发设计的,但它也包含了对Windows Driver Foundation (WDF)的工具和模板,使得开发者可以在其集成开发环境中创建、调试和测试驱动程序。WDF是一种微软推荐的驱动程序模型,它简化了驱动...
标题中的“sqlserver2012驱动类文件”指的是用于连接和操作Microsoft SQL Server 2012数据库的Java Database Connectivity (JDBC) 驱动程序。在Java编程环境中,JDBC驱动是必不可少的,它允许Java应用程序通过Java ...