时间:2015年11月13日 13:50:42 作者:初夏屿森 测试可用.编译完全通过!
环境:WIN7 X64 | Microsoft Visual Studio 2012 | WDK 7600.16385.1
第一步:新建一个空模版
第二步:新建配置管理器
名称为:Driver 并且删除原有的Debug 和 Release 配置模板
建立配置管理器 名称为:Driver
删除 Debug 和 Release 配置管理器,这样我们在导出模板的时候就只有一个驱动模板的配置,很方便,当然也可以不删除
移除他们!属性管理器中就剩下我们定义的管理器:Driver
第三步:新建文件.主要用于导出的时候是配置好的,新建的文件中可以不填写任何代码
到这里我们做了那些事?
1.通过VS2012 新建了一个空项目
2.在新建的项目中建立一个新的属性 名为:Driver
3.删除了原有的 Debug 和 Release 属性!
接下就是重点了,假设我们将 WDK7600.16385.1安装在C盘
配置Driver属性:
通用属性 -> 常规: 目标文件扩展名:.sys //这样当然当然是为了生成sys驱动文件啦
通用属性 -> VC++目录
- 可执行文件目录[添加]:C:\WinDDK\7600.16385.1\bin\x86
- 包含目录[添加]:C:\WinDDK\7600.16385.1\inc\ddk
C:\WinDDK\7600.16385.1\inc\crt
C:\WinDDK\7600.16385.1\inc\api
- 库目录[添加]:C:\WinDDK\7600.16385.1\lib\win7\i386
你的WINDDK 安装在那个目录就添加那个路径即可!
=============================================================================
通用属性 -> C/C++ -> 常规: |调试信息格式:C7兼容(/Z7)
|警告等级:等级2(/W2)
|将警告视为错误:是(/WX)
通用属性 -> C/C++ -> 优化: | 优化:已禁用(/OD)
通用属性 -> C/C++ -> 预处理器: |预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1
通用属性 -> C/C++ -> 代码生成: |运行库:多线程调试 (/MTd)
|安全检查:否
通用属性 -> C/C++ -> 高级: |调用约定:__stdcall (/Gz)
以上配置呢!并不一定就这样设置,可以根据自己的实际情况适当的修改,慢慢的去理解为什么要这样设置
=============================================================================
通用属性 -> 连接器 -> 常规: |启动增量链接:否 (/INCREMENTAL:NO)
|忽略导入库:是
通用属性 -> 连接器 -> 输入: |附加依赖项:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB
|忽略所有默认库:是 (/NODEFAULTLIB)
通用属性 -> 连接器 -> 清单文件: |生成清单:否 (/MANIFEST:NO)
|启动用户账户控制(UAC):否 (/MANIFESTUAC:NO)
通用属性 -> 连接器 -> 调试: |生成调试信息:是 (/DEBUG)
|生成映像文件:是 (/MAP)
|映射文件名:$(TargetDir)$(TargetName).map
通用属性 -> 连接器 -> 系统: |子系统:控制台 (/SUBSYSTEM:CONSOLE)
|堆栈保留大小:4194304
|堆栈提交大小:4096
|驱动程序:驱动程序 (/Driver)
通用属性 -> 连接器 -> 高级: |入口点:DriverEntry
|设置效验和:是 (/RELEASE)
|基址:0x10000
|随机基址: 空 (不要“是”,也不要“否”)
|数据执行保护(DEP):空 (不要“是”,也不要“否”)
==================================================================================
到这里就大功告成了
===============================================================复制到CPP文件测试一下吧
#include "ntddk.h" NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath) { return STATUS_UNSUCCESSFUL; }
============================================================================
测试成功了?那么我们就来导出模板!要经常用
Microsoft Visual Studio 2012 - 文件 - 导出模板
记得是项目模板!其余一律下一步,适当灵活的更改一下
最后我们来测试一下,成功啦!
最后如果亲们发现什么地方存在BUF 可以留言!然后我会修改!