!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!!

作者: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驱动环境搭建的更多相关文章

  1. selenium win7+selenium2.0+python环境搭建

    win7+selenium2.0+python环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是python 2.7(selenium之 ...

  2. win7下android开发环境搭建(win7 64位)

    win7下android开发环境搭建(win7 64位)   一.安装 JDK 下载JDK最新版本,下载地址如下: http://www.oracle.com/technetwork/java/jav ...

  3. WDK10+VS2015 驱动环境搭建

    其实做驱动或者说底层安全的最大问题就是没有合适的资料去参考,网上很难找到想要的信息.比如搭建驱动环境我以前一直用的都是WDK7.1基于控制台去编译的,之前尝试过搭建WDK10+VS2015的组合环境, ...

  4. Win7平台下Cocos2d-x环境搭建

    一.Win7下Cocos2d-x环境搭建 Cocos开发者平台官网——在这里下载游戏引擎           解压放到某个目录下即可 https://www.python.org/downloads/ ...

  5. win7(x64)+VS2012+cocos2d-x环境的配置以及试运行

    原地址:http://blog.csdn.net/gf771115/article/details/20740993 转自:http://blog.sina.com.cn/s/blog_62df697 ...

  6. Win7下Python WEB环境搭建

    环境介绍: Win7 64位 SP1 Python:2.7.6 网关接口:flup Nginx安装:http://blog.csdn.net/jacson_bai/article/details/46 ...

  7. cocos2dx-3.0(1)------win7 32位android环境搭建

    參照链接http://blog.csdn.net/wonengxing/article/details/23601359 ----我的生活,我的点点滴滴!! 一. Android工具安装 1. 安装J ...

  8. Go学习笔记:Win7+LiteIDE+Go+Beego 环境搭建

    安装过程比较简单 1.安装go语言环境: 2.安装git: 3.git bash      安装beego,输入“go get github.com/astaxie/beego”,等待一会儿,在D盘的 ...

  9. win7系统下flutter环境搭建+AndroidStudio编译插件

    flutter学习网址:https://flutter-io.cn/ ----------------------------------------------------------------- ...

随机推荐

  1. P6973 [NEERC2016]List of Primes

    题目传送门. 题意简述:将质数集合的所有子集按照子集和为第一关键字,字典序为第二关键字从小到大排序,求最终形成的字符串的第 \(l\sim r\) 个字符. 在 cnblogs 内查看. 又是一道妙妙 ...

  2. Admixture的监督分群(Supervised analysis)

    目录 说明 实战 说明 Admixture通过EM算法一般用于指定亚群分类:或者在不知材料群体结构背景下,通过迭代交叉验证获得error值,取最小error对应的K值为推荐亚群数目.如果我们预先已知群 ...

  3. 【GS文献】植物育种中基因组选择的方法、模型及展望

    目录 1. GS/GP在植物育种中的角色 2. GP模型应用 3. GP模型的准确性 4. 植物育种的GS展望 5. 小结 Genomic SelectioninPlant Breeding: Met ...

  4. svn简单上传下载文件命令

    上传命令: svn import 本地文件或目录 远程服务端目录 --username '用户名' --password '密码' -m '添加描述(可为空)' 下载命令: svn export 远程 ...

  5. 漏洞分析:CVE-2017-17215

    漏洞分析:CVE-2017-17215 华为HG532路由器的命令注入漏洞,存在于UPnP模块中. 漏洞分析 什么是UPnP? 搭建好环境(使用IoT-vulhub的docker环境),启动环境,查看 ...

  6. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享四:部署到阿里云

    框架: SpringBoot+Mybatisplus+Shiro 简单介绍:关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍 阿里云开放必要端口,mysql与t ...

  7. 『学了就忘』Linux文件系统管理 — 63、磁盘配额介绍

    目录 1.磁盘配额概念 2.磁盘配额条件 3.磁盘配额的相关概念 4.磁盘配额实践规划 1.磁盘配额概念 磁盘配额是限制用户或者用户组在一个分区上可以使用的空间大小和文件个数的限制. 扩展: 管理员可 ...

  8. LInkedList总结及部分底层源码分析

    LInkedList总结及部分底层源码分析 1. LinkedList的实现与继承关系 继承:AbstractSequentialList 抽象类 实现:List 接口 实现:Deque 接口 实现: ...

  9. SQLite is 35% Faster Than The Filesystem

    比方说你要在C++/PHP里实现一个函数Image get_image(string id),不同的图片有1万张(用户头像),你可以把它们存在一个目录/文件夹里,然后fopen()再fread. 你也 ...

  10. 16. Linux find查找文件及文件夹命令

    find的主要用来查找文件,查找文件的用法我们比较熟悉,也可用它来查找文件夹,用法跟查找文件类似,只要在最后面指明查找的文件类型 -type d,如果不指定type类型,会将包含查找内容的文件和文件夹 ...