Windows驱动开发详解:设备栈原理与实践
创作时间:
作者:
@小白创作中心
Windows驱动开发详解:设备栈原理与实践
引用
CSDN
1.
https://blog.csdn.net/m0_72813396/article/details/138049956
设备栈是Windows内核中非常重要的部分,理解设备栈可以帮助我们在驱动开发和调试中节省大量时间。本文将通过USB设备的例子,详细解释设备栈的结构和工作原理,帮助读者掌握这一核心概念。
在Windows NT体系中,内核所有的设备被按照连接次序加载到设备树上,这棵树的根节点是ROOT节点,每一个设备可以从当前路径一直遍历到根节点,从而遍历整个设备树。这里我们看一下USB的例子:
从此图底部开始,示例设备堆栈中的设备对象包括:
- PCI 总线的 PDO 和 FDO:
- 根总线驱动程序枚举内部系统总线(根总线),并为找到的每个设备创建 PDO。其中一个 PDO 适用于 PCI 总线。(图中未显示根总线的 PDO 和 FDO。)
- PnP 管理器将 PCI 驱动程序标识为 PCI 总线的功能驱动程序,加载驱动程序,并将 PDO 传递给 PCI 驱动程序。在其 AddDevice 例程中,PCI 驱动程序为 PCI 总线(IoCreateDevice)创建 FDO,并将 FDO 附加到 PCI 总线的设备堆栈(IoAttachDeviceToDeviceStack)。PCI 驱动程序创建并附加此 FDO,作为其作为 PCI 总线的功能驱动程序的职责的一部分。
- 在此示例中,PCI 总线没有 Filter 驱动程序。
- USB 主控制器的 PDO 和 FDO:
- PnP 管理器指示 PCI 驱动程序启动其设备(IRP_MN_START_DEVICE),然后查询其子级(IRP_MN_QUERY_DEVICE_RELATIONS 的关系类型为 BusRelations)。作为响应,PCI 驱动程序枚举其总线上的设备。在此示例中,PCI 驱动程序查找 USB 主控制器并为该设备创建 PDO。图中的宽箭头表示 USB 主机控制器是 PCI 总线的“子级”。作为 PCI 总线的总线驱动程序的一部分,PCI 驱动程序为其子设备创建 PDO。
- PnP 管理器将 USB 主机控制器的 mini Class/Class 加载驱动程序对标识为 USB 主机控制器的功能驱动程序,并加载驱动程序。PnP 管理器在适当的时间调用驱动程序,以便为 USB 主控制器创建和附加 FDO。
- 在此示例中,USB 主控制器没有 Filter 驱动程序。
- USB 集线器的 PDO 和 FDO:
- USB 主机控制器枚举其总线,在唯一端口中定位 USB 集线器,并为集线器创建 PDO。USB 集线器驱动程序为集线器创建并附加 FDO。
- 此示例中没有 USB 集线器的 Filter 驱动程序。
- 手柄设备的 PDO、FDO 和两个 Filter DO:
- USB 集线器驱动程序枚举其总线,手柄设备的 HID 设备,并为手柄创建 PDO。
- 在此示例中,已在手柄设备的注册表中设置了较低级别的 Filter 驱动程序,因此 PnP 管理器加载 Filter 驱动程序。Filter 驱动程序确定它与设备相关,并创建 Filter DO 并将其附加到设备堆栈。
- PnP 管理器确定游戏杆设备的函数驱动程序是 HID Class/mini Class 加载驱动程序对并加载这些驱动程序。驱动程序对由链接到类驱动程序 DLL 的微型类驱动程序组成;它们共同充当设备的一个函数驱动程序。类/微型类驱动程序对创建一个设备对象 FDO,并将其附加到设备堆栈。
- 上层 Filter 驱动程序以类似于较低级别 Filter 的方式创建 Filter DO 并将其附加到设备堆栈。
- 请注意,父总线驱动程序创建的 PDO 始终位于特定设备的设备堆栈底部。当驱动程序处理 PnP 或电源 IRP 时,它们必须将每个 IRP 一直向下传递到 PDO 及其关联的总线驱动程序。
下图显示了与上图相同的设备堆栈,但强调由哪些驱动程序创建和管理哪些设备对象。
总线驱动程序跨越多个设备堆栈。总线驱动程序为其总线适配器/控制器创建 FDO,并为其每个子设备创建 PDO。
设备栈的总结:
设备堆栈本身描述了内核设备的组织形式,这个形式我们可以在设备管理器中看到:
需要注意的是即插即用软件设备枚举器,这个实际上是 PNP 管理器在应用层看到的接口,当然,它也是第一个在 ACPI 总线上枚举出来的设备,本身的作用就是枚举 PNP 设备。
设备栈和 I/O 请求是息息相关的,I/O 请求本身在设备栈中向下传递,直到有一个驱动程序完成了 I/O 请求,它才会依次返回并一一通知所有在它上面挂载了完成通知的驱动。
热门推荐
G1152高铁停运,出行计划受影响?
心脏早搏患者如何正确选药?
中式烹调师考证热:含金量、考试难度与职业前景全解析
微信定位总失败?试试这招!
揭秘苯酚:一种神奇的有机化合物
东北虎在非洲草原的生存挑战:一项开创性的生物保护实验
全球老虎日:一起守护“百兽之王”
孟加拉虎的神秘栖息地:从班达夫加尔到坎哈
秋招求职必胜指南:简历优化与面试技巧全攻略
UI设计证书+ChatGPT:求职路上的双重助力
新市码头菜:耒阳的美食名片
《青花瓷》:一首歌,一个文化符号
《青花瓷》:一首歌里的中国风
布云朝克特中网四强战绩盘点:从资格赛到半决赛的突破之旅
揭秘布云朝克特中网奇迹背后的训练秘籍
厦门植物园门票省钱攻略:这些人可以半价甚至免费入园!
中国科学院武汉植物园门票价格全知道
武汉植物园门票价格全攻略:35元畅游三大核心植物园之一
食品安全专家提醒:这些蔬菜有毒,千万别乱吃!
菠菜真的有毒吗?一文揭秘草酸真相
揭秘手机购买陷阱:教你避开价格欺诈和翻新机
一碗饭吃出好身材,减脂食谱也能如此美味!
2025年十二生肖职场攻略:谁将事业有成?
龙年来了,你的运势如何?
关世华揭秘2025年十二生肖运势
微信账号被封?这份实用解封指南请收好!
游戏账号被封怎么办?绝地求生&英雄联盟解封指南
盐酸度洛西汀治疗焦虑症效果显著,但需遵医嘱服用
海豹油:鱼油的超级替代品,你知道吗?
中华医学会发布:女性尿酸最新标准