对象,尤其是设备对象是WINDOWS 驱动当中相当重要的概念之一。如果您看过了之前的系列博客之后,您会发现其实在内核模式下WINDOWS对于DRIVER的管理其实是把一个请求也就是REQUEST一级一级的传递,也就是利用链的方式来处理请求。那么DEVICE也就是这一级级传递当中必不可以的节点,而WINDOWS 对于DEVICE是利用OBJECT来进行管理的。
如果你想创建一个DEVICE的对象那么需要调用IoCreateDevice 这个函数来进行。然后咱们需要调用IoAttachDeviceToDeviceStack来把你的这个设备ATTACH到DEVICESTACK上面去。而DEVICESTACK这个栈实际上就是来完成一级一级向上调用的功能。简单说了DEVICE OBJECT的介绍咱们来看一下DEVICE OBJECT 的分类:
Physical Device Object (PDO) − 物理设备对象
Functional Device Object (FDO) − 功能设备对象
Filter Device Object (filter DO) − 过滤设备对象
那么这些设备对象是何时被创建的呢?
首先BUS DRIVER当BUS上面的设备被枚举的时候被创建。
BUS DRIVER的FILTERDRIVER在DEVICE被过滤的时候创建filter DO。