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的菜鸟WDF驱动开发系列
wdk vs2012 驱动编程 win7下用vs2012驱动开发搭建
win7 vs2012+wdk8.0 搭建wdf驱动开发环境,系统:win7 x64 工具:vs2012 + WDK8.0 插件:wdfcoinstaller.msi win7 vs2012+wdk8.0 pci驱动源码
Linux系统CSI设备驱动开发-2012.1.30 Linux系统CSI设备驱动开发-2012.1.30
经过漫长的开发和内部测试,驱动精灵2012 Beta1终于可以与大家见面了!新版驱动精灵2012,我们拥有诸多改进,下面我将一一为大家介绍。 全新界面,2012引擎 驱动精灵2012版本对界面进行了重新设计,界面更简洁,...
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 ...
Microsoft Windows驱动程序模型设计(SHANER--Administrator--2012-10-20-11,27,37).pdf Microsoft Windows驱动程序模型设计.pdf Microsoft+Windows驱动程序模型设计.pdf Programming the microsoft windows driver ...
由陈强作者编著2012年发布的关于安卓底层开发的比较详细的资料。
而Windows最小时间粒度大约10 ms,接收到的LVDS遥测数据常出现丢帧、乱码等现象,因此设计了基于Win7+RTX2012的LVDS遥测采集卡的PXI总线的驱动程序开发。简述LVDS遥测采集卡的性能要求和RTX实时子系统,详述RTX驱动...
inux设备驱动开发详解:基于最新的Linux4.0内核配套光盘
VS三国全图易语言源码2012年写的驱动版 现在不弄全图了发出来给大家分享和研究,这个是驱动版本过VS三国保护系统。
一个自己做的用于嵌入式TDD开发的工程框架/模板 配置: VS2012 + Unity + Cmock + Codewarrior V5.x(默认target为MC9S12XEP100)。 注意,这个Unity是纯C语言的TDD测试套件,不是那个Unity3d。 后续会在博客...
A10+Linux+SPI设备驱动开发-2012.1.31.pdf
适用于Microsoft SQL Server 2014、SQL Server 2012、SQL Server 2008 R2、SQL Server 2008、SQL Server 2005 和 SQL Azure。对于适用于 SQL Server 的 Microsoft JDBC Driver 4.1,将从 SQL Server 2008 开始支持。...
如何界定什么是好的设计?有一个设计大师定义了什么叫做好的设计,他提出了10个原则:1.要有创新力;2.产品一定是有用的;3.符合一定的审美标准;4.产品是易于理解的;5.不必过于显眼;6.产品是诚实的;...
[2012.5.11] v0.5 开发版发布 1、[修正] 重编译IAR驱动内核程序,改进执行效率 2、[修正] 去除Config.ini中关于自动运行和其他选项的固化配置,改为命令行配置 3、[修正] 命令行参数修正为: (1)/Auto,启用自动...
2012.08月的天敏光盘,里面有各种卡的驱动,SDK,服务端,客户端,手机端。以及各种方案的解决手册。网上不好找了,我上传共享。 .. 21,404,644 AutoRun.exe 27 AutoRun.inf <DIR> Dvrcard <DIR> Standalone 根据...
主要用于网站开发和数据库连接的驱动程序,使我们的网站前台与后台相关联,以便我们更好的进行信息处理
它是一个独立的 MATLAB 仪器驱动程序,不需要任何额外的仪器驱动程序即可运行。 有关使用 MATLAB 和 Instrument Control Toolbox 进行仪器通信的信息,请访问: http://www.mathworks.com/products/instrument ...