TOASTER例子阅读(一)
来源:互联网 发布:免备案php香港免费空间 编辑:程序博客网 时间:2024/04/29 20:16
TOASTER例子阅读(一)
1、 I/O管理器(根总线)为总线生成并维护PDO,总线驱动为插入的设备生成并维护PDO(即下层设备驱动为上层设备生成并维护PDO);驱动程序中的AddDevice例程接受的参数PhysicalDeviceObject就是下层设备为其生成的PDO, AddDevice例程Create的只能是该设备的FDO。
2、 总线驱动发现新设备插入后,通过调用IoInvalidateDeviceRelations告诉PnP管理器BusRelations改变(注意:IoInvalidateDeviceRelations中传入的DeviceObject是总线的PDO);PnP管理器发送IRP_MN_QUERY_DEVICE_RELATIONS查询BusRelations,此时总线设备的FDO为新设备生成PDO,并报告。
BTW:TOASTER总线驱动是在发现新设备插入后就生成子PDO,然后通知PnP管理器;然后PnP管理器进行查询。这与DDK中说明不一致,可能无关紧要??
3、 当UnPlug动作发生时,如同Plug动作发生,总线驱动(其FDO) 通过调用IoInvalidateDeviceRelations告诉I/O管理器BusRelations改变(注意:IoInvalidateDeviceRelations中传入的DeviceObject是总线的PDO,不是此时UnPlug的设备PDO)
4、 当设备发生Eject动作时,总线驱动(其FDO) 通过调用IoRequestDeviceEject告诉I/O管理器,此时IoRequestDeviceEject的参数PhysicalDeviceObject是该设备的PDO。
5、 总线驱动程序需要处理两类PnP事件,一类发给总线FDO的PnP事件,一类是总线驱动为插入的设备生成的PDO的PnP事件。对于发给总线FDO的PnP事件,一般都需要继续下传,而对于发给为插入的设备生成的PDO的PnP事件则IoCompleteRequest。
6、 每一个设备都有一个设备堆栈,在该设备堆栈里,代表该设备的PDO永远都处于最底层。总线的PDO与在总线上的设备PDO没有层次关系。但是总线驱动程序负责生成其发现的设备的PDO,设备提供商提供的驱动程序主要是该设备的FDO,FDO进行数据传输/功能作业时一般不需要与代表设备的PDO进行交互。
7、 FiDO都是相对FDO而言,Upper FiDO表明该FiDO在设备堆栈中处于FDO的上面,Lower FiDO表明该FiDO在设备堆栈中处于FDO的下面;但所有的一切都处于PDO的上面。
8、 PnP管理器不保证设备堆栈中的驱动加载顺序,但是它保证了调用AddDevice的顺序来确保Stack的正确。
9、 如果设备处于Raw状态,则它的设备堆栈里只有PDO与总线驱动生成的FiDO
http://superchaozhou.spaces.live.com/Blog/cns!F08DB5D358C5E29F!184.entry
- TOASTER例子阅读(一)
- TOASTER例子阅读(一)
- 阅读笔记: 凸包的例子(一)
- opendaylight(Li)下toaster APP的简单实现
- OpenDaylight开发实例toaster实验过程记录(2)
- 阅读摘录(一)
- 关于阅读(一)
- 每日阅读(一)
- 源码阅读(一)
- 源码阅读(一)
- 阅读笔记(一)
- 论文阅读(一)
- AMD OpenCL例子阅读笔记系列之Radix_Sort(一)
- ibatis例子(一)
- YAMON阅读笔记(一)
- .net阅读心得(一)
- 论文阅读笔记(一)
- qlwm源代码阅读(一)
- 近期世界范围内地震频发,来个地震知识扫盲贴~
- jQuery的一些特性和用法:
- coolite 中GridPanel 导出excel
- 数据库查询汇总(2)
- linux shell 控制脚本执行次数
- TOASTER例子阅读(一)
- 解决MySQL乱码
- js 特效地址
- 在Windows中安装iPhone开发环境
- 非常简单方便的导出Excel的方法
- 条条大路通罗马,关联不上你,我就复制你 --- 多用户情况下复制图层做专题图
- 深圳新生儿出生入户办理流程 - 父深圳公司集体户 母内地户口
- flash camera
- C#中string和String的区别【终极解释】