win7(X64)+wdk7驱动环境搭建
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!
作者:mohist
----- 蓝 屏 警 告 ---
加载驱动的操作请在虚拟机中完成, 可以有效避免物理机蓝屏 或者其他情况出现 带来的损失。
1、准备
wdk7下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=11800
vmware12: (我选择vmware12是因为 其对win7的支持,有些版本对操作系统的是有要求的)
win7: https://msdn.itellyou.cn/ 打开后,选择左侧的操作系统,找到合适你的需求版本下载(下载推荐选择 迅雷,下载链接是 edk2 哦)
DriverMonitor: (Google一下,自行下载)。 主要用来加载和卸载驱动。
DebugView: https://docs.microsoft.com/zh-cn/sysinternals/downloads/debugview (查看内核输出)
64signer: 驱动签名工具。 Google一下, 自行下载
2、环境搭建
A、安装 vmware12 , 再 创建 win7 X64的虚拟机。 (不会? 那就 Google一下)
B、安装win7 操作系统, 并激活。
C、安装 vmware install tool ( 不会? 那就 Google 一下)
3、安装 wdk
下载wdk后,使用 band 或者其他的解压缩工具 解压, 安装即可。(傻瓜式安装 , 下一步,下一步。。。。。)

安装结束后: 安装目录大概是这样的,

4、编写一个自己的第一个驱动程序
特别说明, 我使用的是X64 编译。
我再C盘根目录创建了一个文件夹,名为demo, 里面准备了下面的3个文件.
A、文件名: helloworld.c , 文件内容如下:
#include <ntddk.h> // unload my driver
VOID DriverUnload(PDRIVER_OBJECT pDriverObject)
{
DbgPrint(" the driver unloaded successfully! \n");
} // the entry of driver
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING reg_path)
{
DbgPrint("ok, congratulation ,the driver has loaded successfully!\n"); if(NULL != pDriverObject)
pDriverObject->DriverUnload = DriverUnload; return STATUS_SUCCESS;
}
B、准备文件: makefile . 内容如下:
# 此文件 一般情况下只有一行 并且不需要修改 不能有前导空格
!INCLUDE $(NTMAKEENV)\makefile.def
C、准备文件: SOURCES, 内容如下:
#下边这行指定生成驱动名字HelloWorld.sys
TARGETNAME=HelloWorld
#下边这行指定生成文件的类型DRIVER指驱动
TARGETTYPE=DRIVER
#下边这行指定生成驱动所在的路径\SYS\HelloWorld.sys
TARGETPATH=SYS
#下边这行指定相关头文件所在目录路径
INCLUDES=$(BASEDIR)\inc;\
$(BASEDIR)\inc\wxp;\ ##上边必空一行H:\WINDDK3790(DDK目录) 等价$(BASEDIR)
#下边这行指定驱动源代码*.cpp或者*.c
SOURCES=HelloWorld.c\
---- 上面的文件准备完毕后,大概是这样的--------

5、 编译
依次 点击 : 开始 -> 所有程序 -> windows driver kits -> WDK 7600.16385.1 -> Build Environments -> Windows 7 -> x64 Free Build Environment
A、 键入命令,使终端来到 上面 4 的所在文件夹: C:\demo
B、执行 构建命令: 键入 build , 回车执行构建。

构建结束后,demo目录下会大概是这样的:

6、执行文件 签名。
尽管我开启了 win7测试模式 (管理员控制台执行命令:bcdedit /set testsigning on, 再重启 ),没有签名的驱动是无法运行的。
A、找到 5 中生成的驱动文件: helloworld.sys。

B、使用 debugview工具查看内核输出 (请勾选: 菜单-> capture -> capture kernel 选项), 使用 DriverMonitor 加载驱动。
先来一张没有签名驱动的截图,发现驱动无法加载, 内核自然也没有输出。

同时查看驱动文件的属性,也无法找到关于签名的信息:

C、签名驱动
使用软件 64Signer对驱动文件进行签名。 签名后,就会发现 驱动文件的属性页中出现了 关于签名的tab页。

7、驱动加载与卸载
驱动签名后,使用 driver monitor 和 debugview工具查看驱动内核输出。得到如下结果:

---------- 完结---------
附:
注意文件编码:

win7(X64)+wdk7驱动环境搭建的更多相关文章
- selenium win7+selenium2.0+python环境搭建
win7+selenium2.0+python环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是python 2.7(selenium之 ...
- win7下android开发环境搭建(win7 64位)
win7下android开发环境搭建(win7 64位) 一.安装 JDK 下载JDK最新版本,下载地址如下: http://www.oracle.com/technetwork/java/jav ...
- WDK10+VS2015 驱动环境搭建
其实做驱动或者说底层安全的最大问题就是没有合适的资料去参考,网上很难找到想要的信息.比如搭建驱动环境我以前一直用的都是WDK7.1基于控制台去编译的,之前尝试过搭建WDK10+VS2015的组合环境, ...
- Win7平台下Cocos2d-x环境搭建
一.Win7下Cocos2d-x环境搭建 Cocos开发者平台官网——在这里下载游戏引擎 解压放到某个目录下即可 https://www.python.org/downloads/ ...
- win7(x64)+VS2012+cocos2d-x环境的配置以及试运行
原地址:http://blog.csdn.net/gf771115/article/details/20740993 转自:http://blog.sina.com.cn/s/blog_62df697 ...
- Win7下Python WEB环境搭建
环境介绍: Win7 64位 SP1 Python:2.7.6 网关接口:flup Nginx安装:http://blog.csdn.net/jacson_bai/article/details/46 ...
- cocos2dx-3.0(1)------win7 32位android环境搭建
參照链接http://blog.csdn.net/wonengxing/article/details/23601359 ----我的生活,我的点点滴滴!! 一. Android工具安装 1. 安装J ...
- Go学习笔记:Win7+LiteIDE+Go+Beego 环境搭建
安装过程比较简单 1.安装go语言环境: 2.安装git: 3.git bash 安装beego,输入“go get github.com/astaxie/beego”,等待一会儿,在D盘的 ...
- win7系统下flutter环境搭建+AndroidStudio编译插件
flutter学习网址:https://flutter-io.cn/ ----------------------------------------------------------------- ...
随机推荐
- JSOI(联合省选)2021 划水记
流水账. Day 0 18:10 去本部拿准考证,结果发现已经没有人了./ruo 敲了几份板子,很早就去睡觉了. Day 1 7:30 到 NFLS 拿到准考证,几乎没有人来.于是做起了政治作业. 然 ...
- 【R】调整ggplot图例大小
图例太多时,会挤压正图,显得正图展示区域很小,这时有必要缩小图例. ################# # 减小ggplot图例 ################# library(ggplot2) ...
- 在windows下使用shell,运行shell脚本
在Windows操作系统下运行Shell脚本,缺少的只是一个Git软件.其下载路径为Git - Downloading Package. 安装之后,将安装路径下的bin文件夹的路径作为环境变量.于是我 ...
- linux命令行快速统计文件(压缩文件)的行数
统计(文件|压缩文件)的行数 zcat file.gz | sed -n '$=' #迅速.直接打印出多少行.-n 取消 ...
- [转载]ORA-02287: 此处不允许序号
原文地址:ORA-02287: 此处不允许序号作者:nowhill 转载自 http://blog.sina.com.cn/s/blog_6d496bad01011dyv.html 开发人员反映序列不 ...
- oracle中char],varchar,varchar2
VARCHAR.VARCHAR2.CHAR的区别 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储 ...
- 论文翻译:2020_Weighted speech distortion losses for neural-network-based real-time speech enhancement
论文地址:基于神经网络的实时语音增强的加权语音失真损失 论文代码:https://github.com/GuillaumeVW/NSNet 引用:Xia Y, Braun S, Reddy C K A ...
- javaSE高级篇6 — 注解( 附:注解底层解析 ) —— 更新完毕
注解 ---- 英文:annotation 1.注解长什么样子? @xxxxxxx( 一些信息 ) ----- 这个信息可有可无 2.注解可以放在什么地方? 类本身的上面.属性的上面.方法的上面.参数 ...
- C语言产生随机数(伪)
C语言的获取随机数的函数为rand(), 可以获得一个非负整数的随机数.要调用rand需要引用头文件stdlib.h.要让随机数限定在一个范围,可以采用模除加加法的方式.要产生随机数r, 其范围为 m ...
- 容器的分类与各种测试(二)——vector部分用法
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. 与string相同, vector 同属于STL(Standard Template Library, 标准 ...