阅读:1185回复:1
一个关于DRIVER_OBJECT和DEVICE_OBJECT的困惑,请大家指点!
DRIVER_OBJECT应该是作为驱动程序在内核中对象,DEVICE_OBJECT应该是物理设备对象或功能设备对象。从面向对象的封装性的角度来讲,应该是在DEVICE_OBJECT对象中有一个MajorFunction数组才对,它描述了设备对象提供的功能,但现在 MajorFunction函数却放在了DRIVER_OBJECT对象当中,这很容易让人混淆的。所以目前我都不能确信DRIVER_OBJECT对象中的MajorFunction函数组是否是定义了该驱动程序对象所对应的设备对象DEVICE_OBJECT的功能函数? 希望哪位大虾能指点一下。
|
|
沙发#
发布于:2007-11-15 10:20
从开始接触驱动以来,一直对DRIVER_OBJECT和DEVICE_OBJECT之间的关系很是困惑,经过一段时间的学习,大概了解了两者之间的关系。
DRIVER_OBJECT是驱动程序在内核中的数据结构,每个驱动程序有唯一DRIVER_OBJECT,IO管理器使用驱动程序对象代表每个设备驱动程序,驱动程序描述了驱动程序的载入到内存什么地方,驱动程序的大小和它的主要入口点(MajorFunction数组);驱动程序对象有一个DeviceObject域指向一个设备对象链表,每个设备对象代表一个设备。 DEVICE_OBJECT是物理设备或逻辑设备在内核中的数据结构,跟这个概念相关的有PDO和FDO;PDO对应于具体的硬件设备,每个硬件设备对应一个PDO,而一个PDO可以对应多个FDO;PDO和FDO都是DEVICE_OBJECT的实体;同一个设备驱动程序对象下的所有设备通过NextObject域连接成一个链表(即上述驱动程序设备对象的一个域);AttachedDevice域是针对“早期”驱动的(Window NT4以前的版本,在以后的版本中也可以正常使用);DriverObject域指向与该设备相关的驱动程序对象。 暂时就了解这么多,后面如果再有再修改。 |
|