XinHuaSoft
驱动牛犊
驱动牛犊
  • 注册日期2005-07-19
  • 最后登录2012-06-11
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望167点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1111回复:1

一个关于DRIVER_OBJECT和DEVICE_OBJECT的困惑,请大家指点!

楼主#
更多 发布于:2007-02-02 23:20
  DRIVER_OBJECT应该是作为驱动程序在内核中对象,DEVICE_OBJECT应该是物理设备对象或功能设备对象。从面向对象的封装性的角度来讲,应该是在DEVICE_OBJECT对象中有一个MajorFunction数组才对,它描述了设备对象提供的功能,但现在 MajorFunction函数却放在了DRIVER_OBJECT对象当中,这很容易让人混淆的。所以目前我都不能确信DRIVER_OBJECT对象中的MajorFunction函数组是否是定义了该驱动程序对象所对应的设备对象DEVICE_OBJECT的功能函数? 希望哪位大虾能指点一下。
kirov
驱动牛犊
驱动牛犊
  • 注册日期2006-05-23
  • 最后登录2008-03-19
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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域指向与该设备相关的驱动程序对象。
暂时就了解这么多,后面如果再有再修改。
游客

返回顶部