时间: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 可以留言!然后我会修改!