Windows驱动开发入门 -- HelloWorld
一、驱动开发环境搭建
在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相关推荐
- Windows驱动开发入门系列教程
从事驱动开发也有一段时间了,从最初的无头苍蝇到懵懵懂懂,到入门,直至今天,感觉一路走来,走了不少的弯路,只因为没有人引导.前几天,一个朋友问到我怎么学习Windows驱动开发,我就想到把我学习Wind ...
- windows 驱动开发入门——驱动中的数据结构
最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...
- Windows驱动开发入门 --WDM inf文件模板
本文主要介绍安装WDM驱动的inf文件如何编写. 由于inf文件的规则比较复杂,写法也比较多样,故本文只介绍通过Visual Studio开发WDM驱动时的inf模板文件的通用写法. 模板文件如下: ...
- windows驱动开发学习
序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...
- windows驱动开发推荐书籍
[作者] 猪头三 个人网站 :http://www.x86asm.com/ [序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开 ...
- windows驱动开发环境搭建以及helloworld
文章目录 前言 编译环境-WDK的安装 搭建测试驱动的虚拟机 win11虚拟机 win10虚拟机 在测试机器上运行驱动 修改注册表-显示调试信息 上面驱动代码含义 测试证书签名 其他 旧版本的visu ...
- c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]
Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...
- windows驱动开发-WDF编程
文章目录 前言 WDF编程前的准备工作 WDF编程 创建驱动对象 创建设备对象 设备对象的回调函数 链表操作 驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参 ...
- [Windows驱动开发](一)序言
笔者学习驱动编程是从两本书入门的.它们分别是<寒江独钓--内核安全编程>和<Windows驱动开发技术详解>.两本书分别从不同的角度介绍了驱动程序的制作方法. 在我理解,驱动程 ...
最新文章
- memcached全面剖析–4. memcached的分布式算法
- 各种pytorch项目
- PyTorch 1.9发布!移动端疯狂更新,网友:我的最爱
- 与table有关的布局
- python接口自动化-参数化
- python创造订单_Odoo 10根据销售订单创建项目
- markdown流程图画法小结
- leetcode204. 计数质数(vip题)
- 在 520 这天,竟然有人把 Docker讲清楚了? | 原力计划
- Python模块学习——tempfile
- python引入导入自定义模块和外部文件
- Executors中的几种线程调用方式
- interpretable_Interpretable-AI:监督学习可能失败的地方
- Win 10 桌面简单美化(+开始菜单 TileGenie)
- 计算机机械制图试题及答案,机械制图习题集-附带答案
- Python学习笔记——python基础之python中for......else......的使用
- 华为隐藏功能扩大内存代码大全_华为手机隐藏功能代码大 | 手游网游页游攻略大全...
- 常见算法在实际项目种的应用
- django--安装
- Spring Cloud在国内中小型公司能用起来吗?
热门文章
- 建行的项目外包中的一些经历
- 使用MAC进行软件开发
- Spring Security应用详解(集成SpringBoot)
- spring security
- Python 全栈系列89 - python 发微博文字+图片
- FF新推荐新闻资讯怎么关闭删除教程。
- 打通BurpSuite与Python之间的任督二脉的插件—Burpy
- Python 绘制狄拉克 delta 函数(完美实现)
- 计算机视觉——PyCharm连接远程服务器和Linux Screen命令使用
- 【Codeforces Round #560 (Div. 3)】 A B C D E F1 F2