win7构建成功helloworld驱动、WDF驱动中KMDF与UMDF区别
做一个myhello.c,
#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver)
{DbgPrint("goodbye");
}// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{DbgPrint("first: Hello, my salary!");// 设置一个卸载函数便于这个函数能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}
同一目录下增加sources文件,
TARGETNAME=myhello
TARGETTYPE=DRIVER
SOURCES=myhello.c
同一目录下增加MAKEFILE文件,
!INCLUDE $(NTMAKEENV)\makefile.def
然后从驱动build环境进入myhello目录,build;
成功,构建出.sys驱动程序;
然后使用此文的入门驱动程序;
https://blog.csdn.net/bcbobo21cn/article/details/112074021
makefile文件和前面一样;
sources文件如下;
TARGETNAME=mytest
TARGETTYPE=DRIVERKMDF_VERSION_MAJOR=1SOURCES= mytest.rc \mytest.c TARGET_DESTINATION=wdfMSC_WARNING_LEVEL=/W4 /WX
附带一个资源文件,mytest.rc
#include <windows.h>#include <ntverp.h>#define VER_FILETYPE VFT_DRV
#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
#define VER_FILEDESCRIPTION_STR "Sample Driver using WDF"
#define VER_INTERNALNAME_STR "mytest.sys"#include "common.ver"
如果sources文件的第三句,写为
INCLUDES=$(WDKPATH)\inc\wdf\kmdf\1.9\
build,则提示找不到 <wdf.h>;
如果第三句写为
INCLUDES=C:\WinDDK\7600.16385.1\inc\wdf\kmdf\1.9\
或,
KMDF_VERSION_MAJOR=1
build,则出现下图错误;提示代码有错;代码应该没问题;
此问题可能和驱动程序框架有关;先来学习驱动开发中KMDF和UMDF的概念;
WDF驱动中KMDF与UMDF区别
早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备。从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,
从Vista开始,微软推出了新的驱动程序开发环境WDF(Windows Driver Foundation )。
WDF和WDM的关系有点类似于MFC和Windows SDK的关系,有编程经验的人一看就知道为何WDF开发比WDM容易了。
WDF有KMDF(内核模式的驱动程序)和UMDF(用户模式的驱动程序)两种模式:
1、内核模式驱动程序 KMDF(Kernel-Mode Driver Framework): 这类驱动程序作为内核模式操作系统组件的一部分执行,它们管理I/O、即插即用、内存、进程和线程、安全等。内核模式驱动程序通常为分层结构。 关于KMDF更多的内容,可参阅 MSDN中“Getting Started with Kernel-Mode Driver Framework ”。
2、用户模式驱动程序 UMDF(User-Mode Driver Framework): 这类驱动程序通常提供 Win32 应用程序与内核模式驱动程序或其他操作系统组件之间的接口。用户模式驱动程序支持基于协议或基于串行总线(如摄像机和便携音乐播放器)的设备。关于KMDF更多的内容,可参阅 MSDN中“ Introduction to UMDF“。
3、无论内核模式的驱动程序或者用户模式的驱动程序,都使用同一环境进行构建,这一环境称为WDK;都采用同一套对象模型构建,采用同一个基础承载,这个基础就是WDF。由于WDF驱动模型提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。
4、KMDF是Windows系统底层驱动,文件名为:*.SYS,Vista为2万多外设提供了KMDF,其中也包括USB2.0,因此对于具有USB2.0协议的FX2,只需编写与FX2相关的UMDF即可;UMDF是用户层驱动,文件名为:*.DLL。
KMDF是内核模式驱动程序;UMDF是用户模式驱动程序;
WDM的含义是,Windows Driver Model,Windows驱动程序模型;
WDF的含义是,Windows Driver Foundation,微软开源驱动程序模块框架;
关于KMDF的进一步描述见,
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/kmdf-as-a-generic-pair-model
先build出驱动程序;有时间再加载和调试;因为可能引起蓝屏,等不需要做其他工作,再单独加载和调试驱动;
win7构建成功helloworld驱动、WDF驱动中KMDF与UMDF区别相关推荐
- WDF驱动中KMDF与UMDF区别
众所周知, 早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备.从Windows 2000开始,开发驱动程序必以WDM(Window ...
- Linux下编译构建成功HelloWorld驱动程序并加载
编写一个hello_world.c的驱动程序: hello_world.c: #include <linux/init.h> #include <linux/module.h> ...
- 新安装WIN10网卡未驱动,驱动人生网卡版等软件不能成功安装网卡的解决办法...
本来今天高高兴兴的安装了win10,结果没想到网卡没驱动成功.想着用驱动人生网卡版碾压过去,结果去的那个人生网卡版也没办法安装. 在设备管理器里的网络适配器那里,果然看到了网络适配器是debug字样. ...
- 【win7系统 adb配置与adbd驱动安装记录】
一.配置环境变量 1. 下载adb包 adb和fastboot下载地址: https://adbdownload.com/ 2. 解压文件 此处解压到F:\setup目录下 3. 复制解压路径 F:\ ...
- ISME:污水厂抗性组受细菌组成和基因交换驱动且出水中抗性表达活跃
污水厂抗性组受细菌组成和基因交换驱动且出水中抗性表达活跃 原英文标题:Wastewater treatment plant resistomes are shaped by bacterial com ...
- ISME:污水厂抗性组受细菌组成和基因交换驱动且出水中抗性表达活跃(一作解读)
文章目录 污水厂抗性组受细菌组成和基因交换驱动且出水中抗性表达活跃 摘要 研究方法简介 图1 典型城镇二级活性污泥污水处理厂示意图 Ta=(Ts×Pa)/Ps 表S1 定量宏基因组和宏转录组学指标及其 ...
- Windows驱动开发VXD/WDM/WDF/DDK/WDK的联系和区别
背景介绍 首先,先从基础的东西说起,做任何程序的开发,你都需要一个配套的开发套件,专业术语叫做SDK(Software Development Kit,软件开发套件).比如:开发JAVA程序,我们可能 ...
- 任务驱动在中职计算机课中的应用,论任务驱动教学法在中职计算机基础课上的应用...
[摘 要]任务驱动教学法在职业学校的教学中得到了广泛的应用,尤其是在计算机类课程中应用更为突出.那么什么是任务驱动教学法及任务驱动教学法在职业学校的中职学生中如何施以教学,本文作以下浅析. [关键词] ...
- win7计算机不显示dvd,win7系统找不到DVD驱动的解决方法
win7系统找不到DVD驱动的解决方法分享给大家,windows7系统的用户反映的一个常见问题就是系统提示DVD驱动无法找到,DVD光驱不被系统所识别,在设备管理器中只是一个惊叹号显示数据签名有问题: ...
最新文章
- oracle 257,ORACLE 10g SYSAUX表空间快速增长之WRH$_ACTIVE_SESSION_HISTORY篇
- R语言 非中心化F分布
- 2-docker 安装
- 面向java开发者的函数式编程_函数式编程让你忘记设计模式
- 《图形学》实验一:钻石图案
- docker 微镜像-alpine
- 【Statistics】10g中 Automatic Statistics Collection维护窗口之探查
- wince驱动加载失败
- 无根树任意根深度加强版
- Unity自定义文件夹图标颜色 个性化Unity编译器 unity 彩色文件夹
- Lotka–Volterra equation Competitive Lotka–Volterra equations
- 网易mysql微专业_网易MySQL数据库工程师微专业学习笔记(一)
- 微信小程序获取小程序码
- 接受数据的php文件源码,PHP文件上传源码分析(RFC1867)
- linux如何脚本监控tps,对Linux进行详细的性能监控的方法
- 计算机应用计论文,计算机应用专业毕业计(论文)格式要求.doc
- FOC——9.三相逆变桥
- 五登博鳌,金领冠打造“世界品质”
- 母亲节倒计时,选礼物救急指南
- OpenCV3.3人脸识别模块的API的变化
热门文章
- JVM的XX参数之布尔类型 || KV设值类型
- java知识点7——面向过程和面向对象、面向对象的内存分析、构造方法
- IE6-IE9不支持table.innerHTML的解决方法分享
- HTML5 Canvas 旋转
- VBS转化为exe可执行文件实例演示,vbs转exe工具推荐
- switch( )的经典引用
- BufferedReader和BufferedWriter读写文件
- Python标准库02 时间与日期 (time, datetime包)
- Python基础04 运算
- 【解决方案】istio-ingressgateway HTTP probe failed with statuscode: 503