使用WDF开发驱动程序
使用WDF开发驱动程序
- Windows驱动程序框架(WDF)驱动程序由基于框架的驱动程序所使用的Windows驱动程序框架对象定义的DriverEntry 例程和一组事件回调函数组成。
创建WDF驱动程序时,执行操作:
使用框架驱动程序对象来表示驱动程序
驱动程序的DriverEntry 例程必须调用WdfDriverCreate以创建表示驱动程序的框架驱动程序对象。
WdfDriverCreate方法还会注册驱动程序的EvtDriverDeviceadd回调函数即插即用,该函数(PnP)管理器报告驱动程序支持的设备是否存在。使用框架设备对象支持驱动程序中的PnP和电源管理
所有驱动程序都必须调用WdfDeviceCreate,以便为驱动程序支持的设备创建框架对象。
设备可以是插入到计算机中的一片硬件,也可以是仅限软件的设备。
框架设备对象支持PnP和电源管理操作,驱动程序可以注册事件回调函数,以便在设备进入或离开其工作状态时通知驱动程序。使用框架队列对象和框架请求对象来支持驱动程序的i/o操作
从应用程序或其他驱动程序接收读取、写入或设备i/o控制请求的所有驱动程序都必须调用WdfIoQueueCreate,以创建表示i/o列队的框架列队对象。
驱动程序会为每个i/o队列注册一个或多个请求处理程序。
当i/o管理器向驱动程序发送i/o请求时,框架将为请求创建一个框架请求对象,将该请求对象放置在i/o队列中,并调用驱动程序的一个请求处理程序来通知驱动程序请求可用。
该驱动程序将获取i/o请求,并可以重新排队、完成、取消或转发该请求。使用框架中断对象来处理设备中断
处理设备中断的驱动程序必须调用WdfInterruptCreate,以便为每个中断创建框架中断对象并注册回调函数。
这些回调函数启用和禁用中断,并充当中断服务例程(ISR),并为中断(DPC)延迟过程调用。KMDF驱动程序可以使用框架的DMA启用码对象和DMA事务对象来处理设备(DMA)操作的直接内存访问
如果KMDF驱动程序的设备支持DMA操作,驱动程序应调用WdfDmaEnablerCreate来创建DMA启用程序对象,并使用WdfDmaTransactionCreate创建一个或多个DMA事务对象。
DMA transaction 对象定义于计划设备硬件执行DMA操作的EvtProgramDma回调函数。使用框架的i/o目标对象将i/o请求发送到其他程序
若要将i/o请求传递到其他驱动程序(通常是驱动程序堆栈)中的下一个较低驱动程序,则驱动程序将请求发送到i/o目标对象。
KMDF驱动程序可以使用框架的wmi提供程序对象和wmi实例对象来支持(WMI)功能Windows Management Instrumentation
大多数KMDF驱动程序应支持WMI,并应调用WdfWmiInstanceCreate来注册发送或接收WMI数据的回调函数。
使用框架的同步功能
所有驱动程序都必须了解多处理器同步问题,并应使用框架提供的同步技术。
WDF体系结构
WDF为驱动程序提供了基于对象的接口,框架定义的对象接口包含:
对象方法
方法是驱动程序可以调用以对象执行操作或获取或设置对象属性的函数。
方法名为WdfObjectAction,其中对象描述对象,操作指示函数的作用。
例:WdfDeviceCreate创建设备对象。对象事件回调函数
事件回调函数是驱动程序提供的函数。每个事件回调函数都与某个对象上可能发生的特定事件关联。当发生关联的事件时,框架将调用事件回调函数。
例:驱动程序将注册EvtDeviceD0Entry事件回调,以便在设备进入工作状态时收到通知。对象属性
属性是存储在对象中的值,并且驱动程序可以获取并设置(即,更改)。在许多情况下,属性直接映射到相应的WDM对象中的字段。
不能失败的属性命名为WDF对象获取值和WDF对象集值,并且可能失败的属性被命名为WDF对象检索值和对象赋值。
对象描述对象,值标志函数设置或返回的数据。
例:WDfDeviceGetDriver返回与设备对象相关联的驱动程序对象的句柄。对象句柄
基于框架的驱动程序绝不会直接访问框架对象。相反,驱动程序将接收对象句柄,该句柄可传递给对象的方法。
框架定义了基于框架的驱动程序使用的多种对象类型
- 框架驱动程序对象表示每个驱动程序。
- 框架设备对象表示驱动程序支持的每个设备。
- 框架队列对象代表接收设备i/o请求的i/o队列。
- Framework 请求对象表示每个i/o队列接收的i/o请求数。
使用WDF开发驱动程序相关推荐
- WDF模型驱动程序开发
WDF驱动程序开发 1. 引言 设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作.设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此 ...
- WDF开发USB设备驱动教程(1)
PDF下载地址(1.2版):链接地址 CY001开发板讨论帖:链接地址 注:本文档新版本已出,请在博客中查找,或下载PDF全文文档. 链接地址WDF开发USB设备驱动教程 by 张佩 文档说明 作者写 ...
- WDF开发USB设备驱动教程(2)
PDF全文下载:http://bbs.driverdevelop.com/read.php?tid-120461.html 3.2 获取描述符 上一小节认识了USB 的描述符后,这一节就来讲如何从 U ...
- VS2017、2019驱动WDF开发环境找不到头文件#include <ntddk.h>
一大堆的头文件找不到报错可能是因为SDK与WDF不对应, 例如: 先看自己的WDF安装了什么版本的,下图是没装10.0.19041.0WDF的文件夹 如图: 10.0.19041.0SDK 在没装该版 ...
- WDF开发USB设备驱动教程(5)
五.设备控制 上一章结束后,我们已经完成了USB 设备的配置,完成了配置工作的 USB 设备,就已经具备了正常工作的能力.这一章中,我们讲解一些 USB 设备控制的内容.包括: Pipe的重置:设备的 ...
- Windows 驱动开发资源链接
0 https://msdn.microsoft.com/zh-cn/library/ff554845(v=VS.85).aspx 使用 WDK 示例 http://www.microsoft.com ...
- 从零开始学习Windows WDF驱动程序开发
摘要:本文通过简单的例子和精简的说明,带你快速了解和掌握基于WDF架构的Windows驱动程序的开发过程.WDF自带的文档非常详细而且冗长,读者需要一定的编程基础和英语水平,再加上一定的努力,才能看明 ...
- 基于Windows8与Visual Studio11开发第一个内核驱动程序
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Wind ...
- 基于Windows8与Visual Studio11开发第一个ring3驱动程序
Windows 驱动程序的发展演变 我们在学习开发驱动程序时有必要弄清楚Windows设备驱动程序的发展演变过程(为了简便起见,以下简称驱动程序),以便明白我们将要开发什么样的驱动程序.这就象你开发一 ...
- windows驱动开发-WDF编程
文章目录 前言 WDF编程前的准备工作 WDF编程 创建驱动对象 创建设备对象 设备对象的回调函数 链表操作 驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参 ...
最新文章
- JAVA (集合和数据结构)
- Office EXCEL 如何为宏命令指定快捷键或者重新设置快捷键
- ADF:使用HTTP POST方法进行URL任务流调用
- react实现的点击拖拽元素效果
- MATLAB在运筹学背包问题的应用,运筹学论文之二维背包问题.docx
- 神经网络在关系抽取中的应用
- 简单的javascript计算器
- python数据建模优缺点_Python数据分析\建模入门建议
- C# 解析JSON方法总结
- matlab做瀑布图,Matlab画瀑布图,福利叶变换,频谱图代码
- flash人物原地走路_flash如何做人物走路
- 【产品】使用 Axure 做产品原型设计
- Ubuntu下设置键盘背光灯
- 机器学习小组知识点36:FCM聚类
- 实验六系统安装与简单配置(Linux基础教程 第2版)虚拟机环境下安装龙蜥操作系统(Anolis OS) 8.4
- Eclipse Embedded CDT
- CSS3计数器的使用-遁地龙卷风
- div在不固定高度的情况下垂直或者水平居中
- Blink是如何工作的
- Win10屏幕亮度调节失效之终极解决方案
热门文章
- 红外热成像技术的应用与发展
- linux2t硬盘格式化时间,linux下大于2T硬盘格式化方法
- java知识点ppt背景图片,Java 给PowerPoint文档设置背景颜色和背景图片
- IMDB 电影评论情感分类数据集
- 【持续更新】1998-2022历代英特尔显卡列表,英特尔显卡发布日期
- 差分技术:LVDS(低电压差分信号)
- 【电信学】【2011.06】​基于空时空频编码的MIMO-OFDM通信信道估计与性能分析
- 吴伯凡-认知方法论-如何做到真正的反思
- 软件测试的风险分析与解决办法
- AI公司盈利难?MSN聊天机器人起家的小i是如何做到的