文件系统驱动编程底子篇之2——尺度模子[VC/C++编程]
本文“文件系统驱动编程底子篇之2——尺度模子[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
2、尺度模子
WDM采取了构造化的编程方法,履行效率很高,但编写效率较低,这也是DriverStudio得以发展的重要缘由.正如掌握了COM原理,利用ATL才能掌握精华的原理一样,读者需求忍耐记忆大量底子知识的“痛楚”,暂时放弃编写驱动程序的捷径.
下面的某些图示稍显陈旧,不过已经足以阐明问题了.
固然驱动程序分为多个种类(图1-4),但它们包含的基本内容(图1-5)是一致的.每个驱动程序都从初始化程序DriverEntry进入,通过某个调派例程DispatchXXX派发特定号令(我们无妨称之为IRP),这些IRP有大概在调派例程里就得到了办理,也有大概交给驱动程序的其他部份办理.假如驱动程序A本身不能处理这个IRP号令,它就需求将IRP传送到更下层的驱动B,由它们来处理,此时驱动程序A大概因为等候IRP完成而处于就寝状况,或持续处理新的IRP,直到下层驱动B告诉(或通过某种机制唤醒并告诉)A该IRP已经处理完毕了,此时A就将处理的后果(我们称之为NTSTATUS)返回本来派发这个IRP的发动人.这就是驱动程序处理IRP的一个简化历程.
我们提到了驱动程序是分层的这个概念,那么若何理解分层的概念呢?请看图示:
引用资料1的原话:WDM模子利用了如图2-1的层次构造.图中左边是一个设备对象仓库.设备对象是系统为帮忙软件管理硬件而成立的数据构造.一个物理硬件可以有多个这样的数据构造.处于仓库最底层的设备对象称为物理设备对象(physical device object),或简称为PDO.在设备对象仓库的中间某处有一个对象称为功效设备对象(functional device object),或简称FDO.在FDO的上面和下面还会有一些过滤器设备对象(filter device object).位于FDO上面的过滤器设备对象称为上层过滤器,位于FDO下面(但仍在PDO之上)的过滤器设备对象称为下层过滤器.
由某个家伙(大概是用户情势下的利用程序,也大概是系统内核组件)发动的IRP从上层过滤器驱动程序一向顺流而下,传送到总线驱动程序处理后,再逐级返回上层,终究发动人得处处理的后果.
普通情形下,IRP大概不需求传送到总线驱动程序就被处理掉了,但假如大家都不熟习这个IRP,他们就只好逐级下传了,假如此时有个搞破坏的驱动程序混了进来,拦阻了这个IRP,轻则丧失用户信息、重启、死机,重则造成系统区的数据混乱,你除了重新安装操作系统再无任何事情可做.由此可见,我们不要求驱动程序“有抱负”,但必须“有规律”,每个驱动程序都必须严峻按照标准书写代码,这要求编程人员具有较高的本质.
下面我们来理解驱动编程里最基本的尺度模子,这个模子不能办理全部的编程需求,按照需求,它将存在各种改变.我们来看看这个驱动编程里的“基本定式”:
IO管理器,大家应当理解为该IRP的发动人,大概是张三,也大概是李四,而不是某个固定的组件.这个模子表明了单个驱动程序里各部件的合作与分工,注意它是个循环不断的历程,它的发动人与终究承受人是相同的,所谓“从那边来,就回那边去”.假如我们的编程不触及真正的硬件,StartIo例程、中止服务例程ISR、DPC例程都大概不存在.各部件的具体功效请参看资料1的第五章.
以上是“文件系统驱动编程底子篇之2——尺度模子[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |