chapter 6.1: driver 需要的组件
来源:互联网 发布:数据合并计算怎么做 编辑:程序博客网 时间:2024/05/13 08:52
任何driver必须包含如下:
1.driver载入时的entry point
2.driver object
3.一至多个device
4.其他用来管理device和管理流向device的I/O request的object
5.event callbacks
UMDF driver 结构和需求
======
KMDF driver 结构和需求
任何KMDF driver必须包含如下:
1.DriverEntry函数
2.EvtDriverDeviceAdd回调函数,在PnP manager枚举设备时调用
该函数创建并初始化device object、queue object和所有其他支持的object
non-PnP的驱动不需要EvtDriverDeviceAdd
3.一至多个EvtXxx回调函数,处理事件
由于framework实现了默认的PnP管理和Power管理操作,所以不用操作硬件的驱动不用实现这些代码。
至于一个可载入运行的KMDF driver能多简单,请看Simple Toaster的Toaster.c
device,I/O queue,可以处理读写及设备I/O控制请求,只需要少于400行的代码。
Driver unload函数:
关于PnP设备的驱动不需要driver unload函数,因为framwork提供了默认的
若driver在DriverEntry创建或分配了driver范围的资源,并在unload之前都使用,则需要EvtDriverUnload回调来释放这些资源。
non-PnP driver可以选择实现EvtDriverUnload,若不实现,则驱动无法被卸载。
图6-2表示KMDF driver如何在载入初始化及运行时控制流
当windows载入KMDF driver时,driver会动态和一个兼容的KMDF运行库绑定。
driver映像包含了编译时的KMDF版本:
1.WDF loader确定major version的framwork是否已载入。
若无,它载入需要的库版本。若driver的最低版本要求无法被提供,loader失败,在系统事件中保存日志。
若已载入,loader把driver作为service的client加入,向framework返回相关的信息,由framework调用驱动的DriverEntry。
DriverEntry初始化driver范围的数据,初始化tracing,调用WdfDriverCreate初始化driver object。
2.framework调用driver注册的EvtDriverDeviceAdd回调
它创建初始化一个device object,
配置device的I/O queue和queue object和其他支持对象
注册event callbacks和所有需要的设备接口。
3.framework调用驱动的EvtXxx函数来处理事件。若此时有额外的device加入,则调用相关的EvtDriverDeviceAdd回调
对于PnP设备,移除是一个可以被注册回调的事件。framework会先调用removal回调,再调用cleanup函数
1.driver载入时的entry point
2.driver object
3.一至多个device
4.其他用来管理device和管理流向device的I/O request的object
5.event callbacks
UMDF driver 结构和需求
======
KMDF driver 结构和需求
任何KMDF driver必须包含如下:
1.DriverEntry函数
2.EvtDriverDeviceAdd回调函数,在PnP manager枚举设备时调用
该函数创建并初始化device object、queue object和所有其他支持的object
non-PnP的驱动不需要EvtDriverDeviceAdd
3.一至多个EvtXxx回调函数,处理事件
由于framework实现了默认的PnP管理和Power管理操作,所以不用操作硬件的驱动不用实现这些代码。
至于一个可载入运行的KMDF driver能多简单,请看Simple Toaster的Toaster.c
device,I/O queue,可以处理读写及设备I/O控制请求,只需要少于400行的代码。
Driver unload函数:
关于PnP设备的驱动不需要driver unload函数,因为framwork提供了默认的
若driver在DriverEntry创建或分配了driver范围的资源,并在unload之前都使用,则需要EvtDriverUnload回调来释放这些资源。
non-PnP driver可以选择实现EvtDriverUnload,若不实现,则驱动无法被卸载。
图6-2表示KMDF driver如何在载入初始化及运行时控制流
当windows载入KMDF driver时,driver会动态和一个兼容的KMDF运行库绑定。
driver映像包含了编译时的KMDF版本:
1.WDF loader确定major version的framwork是否已载入。
若无,它载入需要的库版本。若driver的最低版本要求无法被提供,loader失败,在系统事件中保存日志。
若已载入,loader把driver作为service的client加入,向framework返回相关的信息,由framework调用驱动的DriverEntry。
DriverEntry初始化driver范围的数据,初始化tracing,调用WdfDriverCreate初始化driver object。
2.framework调用driver注册的EvtDriverDeviceAdd回调
它创建初始化一个device object,
配置device的I/O queue和queue object和其他支持对象
注册event callbacks和所有需要的设备接口。
3.framework调用驱动的EvtXxx函数来处理事件。若此时有额外的device加入,则调用相关的EvtDriverDeviceAdd回调
对于PnP设备,移除是一个可以被注册回调的事件。framework会先调用removal回调,再调用cleanup函数
- chapter 6.1: driver 需要的组件
- Chapter 5 – Driver
- chapter 4.7: WDF的device和driver支持
- [linux device driver] Chapter 03:IS_ERR的理解
- [linux device driver] Chapter 14:kobject_init的理解
- chapter 2.1: 什么是windows Driver
- 组件需要容器的帮助
- CSS Mastery Chapter 6 需要学习的点
- chapter 9.4: Driver创建I/O请求的Memory Object和buffer
- [linux device driver]Chapter 03:Scull_load中涉及到的群组权限之staff\wheel
- [linux device driver]Chapter 03:scull_load中涉及到的bash命令 exit
- 原来用JAVA操作DATABASE是需要JDBC driver的
- 在调试Windows CE driver时需要注意的问题
- OpenStack里使用Nova Docker Driver需要注意的细节
- [linux device driver] Chapter 03:scullc_open理解
- SCA组件运行需要设置的参数
- OFFICE2016仅安装需要的组件
- lzg_ad:打印机需要的组件支持
- Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)
- 乐phone手机任意软件包安装删除漏洞
- 第一篇博文 完全用来记录自己学习过程中遇到的问题
- SAP求最大流
- Java安装配置 tinyos环境搭建基础
- chapter 6.1: driver 需要的组件
- Flex学习笔记(一)
- 1177
- 独白
- 插入排序 InsertSort
- 线程中不可避免的wait/notify/notifyAll/join
- HTML 笔记
- STRUTS2获得session
- chapter 6.2: 驱动对象