Windows驱动开发WDM (3)- 设备内存读写方式

驱动所创建的设备一般有3种方式:缓冲区方式,直接方式和其他方式(对应DO_BUFFERED_IO, DO_DIRECT_IO和0)。

比如:

fdo->Flags |= DO_BUFFERED_IO

DO_BUFFERED_IO指定当前设备以缓冲区方式工作。
通常用户模式和内核模式交互的时候,用户模式会传一个buffer进来,注意:这个buffer是用户模式的虚拟地址。尽管驱动程序可以访问用户模式的虚拟地址,但是这里有个问题,就是当进程切换的时候,同一个用户模式的虚拟地址对应不同的物理地址,这样当驱动去读取这个地址的时候就会出错,这是灾难性的错误。所以,内核模式的驱动一般都不会直接使用用户模式的虚拟地址(特殊需要也可以使用,但是需要很高的技术要求,而且需要很小心)。

 

缓冲区方式(DO_BUFFERED_IO)
I/O 管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲区。驱动程序将使用这个系统缓冲区工作。 I/O 管理器负责在系统缓冲区和用户模式缓冲区之间复制数据。
系统缓冲区的地址用 Irp->AssociatedIrp.SystemBuffer
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值