VS2012 + WDK7.1驱动开发

因环境限制,只能使用 VS2012 开发项目,环境为 Windows 7 x64,所以选择了 WDK7.1.
WDK7.1 在这里下载
在这里插入图片描述
下载完成以后,我们找到这个 .iso 文件,用解压工具把它解压到某个文件夹内:
在这里插入图片描述找到这个安装文件,无脑安装就好了(路径建议选择默认路径):
在这里插入图片描述安装完成后我们在 C 盘的根目录就看到了这个文件夹:
在这里插入图片描述
然后打开 VS2012,新建一个 win32 控制台项目,注意这里要创建空项目,之后新建一个 main.cpp 文件,复制以下代码:

#include "ntddk.h"

NTSTATUS unload(PDRIVER_OBJECT driver)
{
    DbgPrint("driver: %ws unload", driver->DriverName);
    DbgPrint("Driver unload success..");
    return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path){
    driver->DriverUnload = (PDRIVER_UNLOAD)unload;
    DbgPrint("%ws", reg_path->Buffer);
    DbgPrint("Driver load success..");
    return STATUS_SUCCESS;
}

在这里插入图片描述最后根据以下要求配置项目属性:

//VS2010+WDK7.1,编译32位和64位的驱动配置

//到微软官网下载WDK7.1,安装到默认的C盘根目录即可

//编译出32位驱动
VS2010里新建一个空项目,新建一个配置名:DriverWDK32 	//自行定义名字
VS++目录-》可执行文件目录:C:\WinDDK\7600.16385.1\bin\x86;$(ExecutablePath)   //其实这里都是32位的编译器,链接器,只是通过传参,调用X86或者AMD64的编译连接器,生成32位或者64位的驱动
常规-》目标文件扩展名:.sys
C/C++-》常规-》附加包含目录:C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK\7600.16385.1\inc;C:\WinDDK\7600.16385.1\inc\crt;C:\WinDDK\7600.16385.1\inc\api;%(AdditionalIncludeDirectories)
C/C++-》常规-》调试信息格式:C7 兼容 (/Z7)
C/C++-》优化-》优化:已禁用 (/Od)
C/C++-》预处理器-》预处理器定义:WIN32=100;_X86_=1;WINVER=0x500;DBG=1;%(PreprocessorDefinitions)
C/C++-》代码生成-》运行库:多线程调试 (/MTd)
C/C++-》代码生成-》缓冲区安全检查:否 (/GS-)
C/C++-》高级-》调用约定:__stdcall (/Gz)
C/C++-》高级-》编译为:编译为 C++ 代码 (/TP)

链接器-》常规-》启用增量链接:否 (/INCREMENTAL:NO)
链接器-》常规-》附加库目录:C:\WinDDK\7600.16385.1\lib\win7\i386;%(AdditionalLibraryDirectories)
链接器-》输入-》附加依赖项:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;%(AdditionalDependencies)
链接器-》输入-》忽略所有默认库:是 (/NODEFAULTLIB)
链接器-》清单文件-》启用用户账户控制(UAC):否 (/MANIFESTUAC:NO)
链接器-》调试-》生成调试信息:是 (/DEBUG)
链接器-》调试-》生成映射文件名:是 (/MAP)
链接器-》系统-》子系统:控制台 (/SUBSYSTEM:CONSOLE)
链接器-》系统-》堆栈保留大小:4194304
链接器-》系统-》堆栈提交大小:4096
链接器-》系统-》驱动程序:驱动程序 (/Driver)
链接器-》高级-》入口点:DriverEntry
链接器-》高级-》设置校验和:是 (/RELEASE)
链接器-》高级-》基址:0x10000
链接器-》高级-》随机地址:空
链接器-》高级-》数据执行保护(EDP):空
链接器-》高级-》目标计算机:MachineX86 (/MACHINE:X86)

//编译64位驱动,稍微改动下边的几个,其他跟上边相同即可:
VS2010里新建一个空项目,新建一个配置名:DriverWDK64	//自行定义名字
链接器-》常规-》附加库目录:C:\WinDDK\7600.16385.1\lib\win7\amd64;$(LibraryPath)
C/C++-》预处理器-》预处理器定义:WIN32=100;_AMD64_=1;WINVER=0x501;DBG=1;%(PreprocessorDefinitions)   //这里用到的估计也就只有_AMD64_,DBG,因为剩下的都不是64位的定义,没用到也就能编译过去了
链接器-》高级-》目标计算机:MachineX64 (/MACHINE:X64)

我这里是win7 x64 环境,所以最后编译的时候还要在这里选择 x64:
在这里插入图片描述编译运行,没有错误,找打文件所在目录:
在这里插入图片描述
在这里插入图片描述使用 Driver Monitor 加载这个驱动,显示签名无效:
在这里插入图片描述因为 windows 在 vista 以后就加入了 “禁止没有签名的驱动加载” 这个功能,这里我们需要伪造一个驱动签名,用到了 “亚洲诚信数字签名” 这个工具。不再介绍使用方法,感兴趣可以自己百度找个破解版的。
最后签名成功的效果是这样的:
在这里插入图片描述
再次打开 Driver Monitor ,加载这个驱动,已经加载成功,如果想看打印的内容,可以开一个 DbgView。
在这里插入图片描述
但是我写的驱动代码应该有些问题,导致加载了以后电脑很容易卡死,不确定是哪里的问题,之后有时间再研究。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值