一、驱动开发环境搭建

在Download the Windows Driver Kit (WDK)页面中下载最新版本的Visual Studio和WDK进行安装。如果要下载老版本可以到Other WDK downloads下载。

本文演示环境为:Visual Studio 2017版本,WDK for Windows 10 17740。其他版本亦可。

二、Hello Word工程

在Visual Studio中选择Visual C++ -> Windows Driver -> Empty WDM Driver模板,新建一个空的WDM驱动项目,如图:

由于是简单的HelloWorld驱动,故删除用于驱动安装的inf文件,即HelloWorld.inf。
新建test.c文件,切记是.c文件,不是.cpp,内容如下:

#include <ntddk.h>VOID Unload(PDRIVER_OBJECT DriverObject) {UNREFERENCED_PARAMETER(DriverObject);KdPrint(("Driver Unload\n"));
}NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) {UNREFERENCED_PARAMETER(DriverObject);UNREFERENCED_PARAMETER(RegistryPath);KdPrint(("DriverEntry\n"));DriverObject->DriverUnload = Unload;return STATUS_SUCCESS;
}

DriverEntry是驱动的入口函数,Unload是注册的驱动卸载函数,在驱动被卸载时,会调用这个函数进行清理操作,这2个函数组成了一个最简单的驱动。
KdPrint是日志输出函数,相当于应用层的OutputDebugString,输出内容同样可以使用DbgView查看。

在Visual Studio中选择对应配置进行编译即可。需要注意的是如果需要编译Windows XP和Windows 7平台的驱动,需要在Driver Setting -> Target OS Version中选择Windows 7,如图:

三、驱动安装和测试

Helloworld.sys拷贝到对应的操作系统(建议使用虚拟机进行测试,防止系统蓝屏导致数据丢失),要注意32位驱动只能用在32位系统,64位驱动只能用在64位系统。

打开Dbgview,在“Capture”菜单中选中如下项,进行内核日志捕获:

启动KmdManager选择驱动文件,依次点击“Register”,“Run”,驱动便被安装,此时可以在Dbgbiew中看到KdPrint输出的相应日志。如果需要卸载驱动需要依次点击“Stop”,“Unregister”。

如果KmdManager安装驱动时出现如下提示,需要检查驱动的位数和系统环境是否一致。

本文介绍的只是一个最简单的Helloworld驱动,所以演示的时候是使用KmdManager工具进行安装卸载。

Windows驱动开发入门 -- HelloWorld相关推荐

  1. Windows驱动开发入门系列教程

    从事驱动开发也有一段时间了,从最初的无头苍蝇到懵懵懂懂,到入门,直至今天,感觉一路走来,走了不少的弯路,只因为没有人引导.前几天,一个朋友问到我怎么学习Windows驱动开发,我就想到把我学习Wind ...

  2. windows 驱动开发入门——驱动中的数据结构

    最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...

  3. Windows驱动开发入门 --WDM inf文件模板

    本文主要介绍安装WDM驱动的inf文件如何编写. 由于inf文件的规则比较复杂,写法也比较多样,故本文只介绍通过Visual Studio开发WDM驱动时的inf模板文件的通用写法. 模板文件如下: ...

  4. windows驱动开发学习

    序言]  很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...

  5. windows驱动开发推荐书籍

    [作者]  猪头三  个人网站 :http://www.x86asm.com/ [序言]  很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开 ...

  6. windows驱动开发环境搭建以及helloworld

    文章目录 前言 编译环境-WDK的安装 搭建测试驱动的虚拟机 win11虚拟机 win10虚拟机 在测试机器上运行驱动 修改注册表-显示调试信息 上面驱动代码含义 测试证书签名 其他 旧版本的visu ...

  7. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  8. windows驱动开发-WDF编程

    文章目录 前言 WDF编程前的准备工作 WDF编程 创建驱动对象 创建设备对象 设备对象的回调函数 链表操作 驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参 ...

  9. [Windows驱动开发](一)序言

    笔者学习驱动编程是从两本书入门的.它们分别是<寒江独钓--内核安全编程>和<Windows驱动开发技术详解>.两本书分别从不同的角度介绍了驱动程序的制作方法. 在我理解,驱动程 ...

最新文章

  1. memcached全面剖析–4. memcached的分布式算法
  2. 各种pytorch项目
  3. PyTorch 1.9发布!移动端疯狂更新,网友:我的最爱
  4. 与table有关的布局
  5. python接口自动化-参数化
  6. python创造订单_Odoo 10根据销售订单创建项目
  7. markdown流程图画法小结
  8. leetcode204. 计数质数(vip题)
  9. 在 520 这天,竟然有人把 Docker讲清楚了? | 原力计划
  10. Python模块学习——tempfile
  11. python引入导入自定义模块和外部文件
  12. Executors中的几种线程调用方式
  13. interpretable_Interpretable-AI:监督学习可能失败的地方
  14. Win 10 桌面简单美化(+开始菜单 TileGenie)
  15. 计算机机械制图试题及答案,机械制图习题集-附带答案
  16. Python学习笔记——python基础之python中for......else......的使用
  17. 华为隐藏功能扩大内存代码大全_华为手机隐藏功能代码大 | 手游网游页游攻略大全...
  18. 常见算法在实际项目种的应用
  19. django--安装
  20. Spring Cloud在国内中小型公司能用起来吗?

热门文章

  1. 建行的项目外包中的一些经历
  2. 使用MAC进行软件开发
  3. Spring Security应用详解(集成SpringBoot)
  4. spring security
  5. Python 全栈系列89 - python 发微博文字+图片
  6. FF新推荐新闻资讯怎么关闭删除教程。
  7. 打通BurpSuite与Python之间的任督二脉的插件—Burpy
  8. Python 绘制狄拉克 delta 函数(完美实现)
  9. 计算机视觉——PyCharm连接远程服务器和Linux Screen命令使用
  10. 【Codeforces Round #560 (Div. 3)】 A B C D E F1 F2