初学驱动,看张帆的书,一直没弄懂设备对象和驱动对象之间的关系,而IO控制器又是如何组织他们的层次关系的....
------解决方案--------------------
每个驱动程序对应一个驱动对象,记录与驱动程序有关的信息。驱动程序可以创建若干个设备,每个设备对应一个设备对象。驱动对象中记录着该驱动程序所创建的第一个设备,每个设备对象中记录着创建它的驱动对象和该驱动对象创建的下一个设备对象。
------解决方案--------------------
母亲与孩子的关系,作为一个母亲可以有多个孩子,但作为孩子却只可能是一个母亲! 你母亲肯定知道有几个孩子,而你肯定知道有几个兄妹! 就这么简单
------解决方案--------------------
按照前面的概念,设备B的母亲就是驱动B。
实际上驱动对象就像是个类工厂,而设备对象就是类工厂按模子倒出来的产品,每一个产品都分别Attach到了其他另一个产品下面,从而形成了设备栈。
所谓的过滤驱动是WDM驱动模型里的概念,过滤驱动与非过滤驱动的区别有2点:
第一是非过滤驱动的必要性大于过滤驱动,过滤驱动的存在完全是以它所要过滤的那个驱动为中心的,如果那个要过滤的驱动不存在,过滤驱动也就没了存在的必要。这有点像是正职和副职的关系,正职都撤消了,副职当然也就没必要设置了。
第二是这些副职和正职的组织形式,这种正副职的组织完全是依赖注册表中记录的信息建立起来的,在注册表里记录了每一个正职对应有哪些副职,以及它们的出工顺序是如何的,出工顺序考前的,在设备栈里加载就靠前,从设备过来的数据就能更早拿到。作为副职位置的过滤驱动是记录在相应设备类驱动目录下的 LowerFilters 和 UpperFilters 键里面的。
这些概念确实很绕人,我也没见过哪本书是讲清楚了的,最好的途径还是写个 dummy 驱动四处挂,然后用 DeviceTree 程序观察系统中驱动栈的变化。