Windows操作系统是分层调用。其实在驱动程序中也可以是分层调用的。
驱动程序的垂直层次结构
不仅是WDM驱动,NT式驱动也可以分层,这主要是通过一个设备附加在另一个设备之上。因此,可以将WDM驱动模型看成是NT驱动模型的延伸。
设备的创建顺序是,先创建底层PDO,在创建高层的FDO,这也就是设备堆栈的生长方向,即从底层设备到高层设备。在PDO和FDO之间可能夹杂着各种过滤驱动。每层的设备对象由不同的驱动程序所创建,或者说每层的设备对应着不同的驱动程序。有的驱动程序是系统自带的,有的是需要程序员编写。底层设备对象寻找上一层的设备对象是依靠底层设备对象的AttachedDevice来寻找的,如果某一设备的AttachedDevice为空,说明已经到了设备堆栈的顶部。
而高层设备寻找低一层的设备对象,设备对象没有相关子域可以使用。解决的办法是,通过程序员自定义设备扩展,在设备扩展记录低一层的设备对象。这样从底层的设备对象到达设备顶部,再从设备顶部到达设备堆栈底部,都有了相应的办法。