Windows驱动开发WDM (14)- 分层驱动(设备栈,I/O栈)

本文详细介绍了Windows驱动开发中的设备栈(Device Stack)和I/O栈的概念,包括PDO、FDO之间的关系,以及如何通过IoAttachDeviceToDeviceStack构建设备栈。设备栈中的IRP传递过程由IO_STACK_LOCATION数据结构记录,设备对象根据IRP需求选择直接处理、StartIo或传递给下层驱动。此外,还讨论了遍历设备栈的方法。
摘要由CSDN通过智能技术生成

前面的文章介绍了一个简单的功能驱动和过滤驱动。它们都是用WDM模型写的驱动,在写WDM驱动的时候,我们经常会碰到PDO和FDO。PDO就是物理设备对象,FDO是功能设备对象。FDO是附在PDO上面的,当然FDO上面还可以有其他的FDO。这样就构成了一个栈,就是设备栈。所以说WDM驱动天生就是分层驱动程序,最起码它有PDO和FDO。其实WDM驱动就是从分层的NT驱动发展过来的。

 

设备栈(Device Stack)

当我们在WDM驱动的AddDevice里面创建一个设备对象时,一定会调用这个函数:IoAttachDeviceToDeviceStack。

PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
  _In_  PDEVICE_OBJECT SourceDevice,
  _In_  PDEVICE_OBJECT TargetDevice
);

这个参数的作用就是将SourceDevice附在TargetDevice上面,通常TargetDevice是AddDevice传进来的PDO。如果PDO上面还有其他FDO,比如过滤驱动啥的,那么SourceDevice将会附在这些过滤驱动设备对象上面。SourceDevice就是新创建的FDO。这个参数的返回值是SourceDevice的下层设备对象,也就是说返回的设备对象的上面就是新创建的FDO(SourceDevice)。
通过IoAttachDeviceToDeviceStack函数,可以构成一个设备栈。比如前面讲过滤驱动的时候(h

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值