学习windows驱动(驱动对象)
2015-10-28 09:02
204 查看
驱动对象是框架中第一个被创建的对象,最后一个被删除的对象。
当驱动对象不存在了以后,其它子对象也就不存在了。
当获得驱动对象,就可以遍历获得它的所有子对象。
可以通过WdfGetDriver函数获得驱动对象句柄。
驱动对象代表加载到系统空间的驱动模块。相同驱动文件,不管同时作用于多少设备,驱动对象总是唯一的。
可以把全局变量保存在驱动对象里。
PNP类驱动,驱动对象负责注册EvtDriverDeviceAdd事件回调,这个事件回调相当于WDM中的AddDevice函数,用于建立设备栈。
非PNP类驱动,一般通过驱动对象注册EvtDriverUnload事件回调,相当于WDM里的DriverUnload函数,保存在驱动对象里的系统资源一般借助EvtDriverUnload事件回调释放。资源泄露在内核里是非常严重的错误。
可以为驱动初始化一个事件跟踪(WPP机制)。
在驱动入口DriverEntry函数里创建驱动对象。
根据驱动类型,DriverEntry入口函数有不同写法:设备驱动、过滤驱动和纯软件驱动。纯软件驱动是不与任何硬件打交道,在一个内核里提供接口服务的软件模块。
设备驱动一定要注册EvtDriverAdd事件回调;过滤驱动根据类型,如果过滤设备栈属于某个物理设备,也应注册EvtDriverDeviceAdd事件回调;否则,驱动加载后,将不起作用。
纯软件驱动不可以注册EvtDriverDeviceAdd事件回调;过滤驱动根据类型,如果过滤的设备栈不属于物理设备(如文件驱动设备栈),则也不可注册此事件回调;否则,返回无效参数错误。
当驱动对象不存在了以后,其它子对象也就不存在了。
当获得驱动对象,就可以遍历获得它的所有子对象。
可以通过WdfGetDriver函数获得驱动对象句柄。
WDFDRIVER driver = WdfGetDriver();
驱动对象代表加载到系统空间的驱动模块。相同驱动文件,不管同时作用于多少设备,驱动对象总是唯一的。
可以把全局变量保存在驱动对象里。
PNP类驱动,驱动对象负责注册EvtDriverDeviceAdd事件回调,这个事件回调相当于WDM中的AddDevice函数,用于建立设备栈。
非PNP类驱动,一般通过驱动对象注册EvtDriverUnload事件回调,相当于WDM里的DriverUnload函数,保存在驱动对象里的系统资源一般借助EvtDriverUnload事件回调释放。资源泄露在内核里是非常严重的错误。
可以为驱动初始化一个事件跟踪(WPP机制)。
在驱动入口DriverEntry函数里创建驱动对象。
根据驱动类型,DriverEntry入口函数有不同写法:设备驱动、过滤驱动和纯软件驱动。纯软件驱动是不与任何硬件打交道,在一个内核里提供接口服务的软件模块。
设备驱动一定要注册EvtDriverAdd事件回调;过滤驱动根据类型,如果过滤设备栈属于某个物理设备,也应注册EvtDriverDeviceAdd事件回调;否则,驱动加载后,将不起作用。
纯软件驱动不可以注册EvtDriverDeviceAdd事件回调;过滤驱动根据类型,如果过滤的设备栈不属于物理设备(如文件驱动设备栈),则也不可注册此事件回调;否则,返回无效参数错误。
相关文章推荐
- 为什么使用$.ajax()中的data传参到后台取值为null
- Unity5中优化VR 应用的12个技巧
- python模拟登录新浪微博
- 把Windows7启动栏上的库修改为我的电脑
- 过滤器、监听器、拦截器的区别
- [No000035]操作系统Operating System之OS Interface操作系统接口
- Light OJ 1050 - Marbles(概率DP)
- 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model
- 通过正则表达式判断TextField内容是否符合要求
- 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model
- 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model
- 【Android测试工具】01. Android TraceView工具使用详解
- 数据库索引
- 【NOIP2005】过河 DP
- 深入解析Java编程中接口的运用
- 面试题
- 海量用户-高并发SAAS产品测试上线流程
- python制作最美应用的爬虫
- linux动态编译和静态编译
- 10 种机器学习算法的要点