首页 > 其他分享 >设备通讯(1)----缓冲区方式(DO_BUFFERED_IO)

设备通讯(1)----缓冲区方式(DO_BUFFERED_IO)

时间:2024-04-16 22:12:08浏览次数:20  
标签:DO 管理器 BUFFERED 系统 ---- IO 缓冲区

驱动的AddDevice中,若做了如下设置:fdo->Flags |= DO_BUFFERED_IO ,则意味着指定该设备为缓冲区方式工作。

以ReadFile和WriteFile为例,下面看看这种方式究竟是如何工作的,先看一个概要图,

对着图来说明比较容易:

 

1:上层程序创建用户缓冲区,然后调用ReadFile/WriteFile 对设备进行读写操作

2:I/O管理器将会发起主功能号为IRP_MJ_READ或IRP_MJ_WRITE的IRP

3:I/O管理器将创建一个与用户模式缓冲区大小相等的系统缓冲区

4:系统缓冲区的地址为: Irp->AssociatedIrp.SystemBuffer,长度和偏移量分别为:IO_STACK_LOCATION->Parameters->Read(或Write)->Length,

      IO_STACK_LOCATION->Parameters->Read(或Write)->ByteOffset

5:驱动程序对该系统缓冲区进行读写操作,I/O管理器会自动完成系统缓冲区和用户缓冲区之间的数据拷贝。


优点:数据复制,内核模式下的缓冲区都是由系统管理,使用方便。

缺点:数据拷贝增加了系统开销,适合小数据量读写时使用。

                        
原文链接:https://blog.csdn.net/saloon_yuan/article/details/8905328

标签:DO,管理器,BUFFERED,系统,----,IO,缓冲区
From: https://www.cnblogs.com/hshy/p/18139360

相关文章

  • C++ 递归与面向对象编程基础
    C++递归递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。递归示例将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通过将......
  • 划船问题
    题意:每个人有一个名字和一个姓氏,同名或同性可以做一条船,一条船最多做2人,求最少需要多少条船。思路:显然是匹配问题,但是朴素的匹配太慢了。我们考虑如何优化。人类智慧:我们建一个二叉树,以任意人为根,然后选一个和他同性的连在右子,同名的连在左子,以此类推。不难发现我们现在可......
  • Parcharm-ModuleNotFoundError: No module named 'request'--解决方案
    问题:在Pycharm中报requestsmodule找不到特别的地方:已经通过“pip3installrequests”的命令安装过requests这个模块,并能顺利运行,但是不能在Pycharm中运行 解决方案如下:1.找到Pycharm中的setting设置,并打开2.找到自己工作的目录下的“PythonInterpreter”-->"+......
  • HarmonyOS开发(一)
    1、安装 DevEcoStudio链接:https://developer.huawei.com/consumer/cn/deveco-studio/2、安装配置环境 为保证DevEcoStudio正常运行,建议电脑配置满足如下要求:操作系统:Windows1064位、Windows1164位内存:8GB及以上硬盘:100GB及以上分辨率:1280*800像素及以上4、配置......
  • Could not set parameters for mapping
    错误现象:Resolved[org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.type.TypeException:Couldnotsetparametersformapping:ParameterMapping{property='keywords',mode=IN,javaType=classjava.lang.Object,jdbcType=n......
  • 一些我在不同时间段很喜欢的曲子(电子音乐)
    如题,以及一些音乐制作人横杠前是曲子,后是制作人2020about:EnergyDrink-VirtualRiotGenre:Complextro2020.11:Pluckandplay-KwonGenre:EDM2022.3:Celestial-PaperSkiesGenre:MelodicDubstep/Drumstep/DrumandBass2022.7:Canyouhearme?-linearringGenre:Fut......
  • 自建一款现代化的K8s可视化管理系统
    自建一款现代化的K8s可视化管理系统原创 院长技术 院长技术 2024-03-0107:30 北京 3人听过院长简介作者:院长职位:运维开发工程师官网:https://deanit.cn博客:https://blog.deanit.cn擅长:【虚拟化,容器化,自动化运维,CICD,监控,日志,中间件,双机热备,分布式存储,数据库,认......
  • 30 天精通 RxJS (21):深入 Observable
    我们已经把绝大部分的operators都介绍完了,但一直没有机会好好的解释Observable的operators运行方式。在系列文章的一开头是以数组(Array)的operators(map,filter,concatAll)作为切入点,让读者们在学习observable时会更容易接受跟理解,但实际上observable的oper......
  • AI换脸:FaceFusion 3.5.0更新,解决老版本无法使用问题!
    好久不见!闲话不多说,今天主要是通知一下FaceFusion两个版本的更新。更新内容如下:V3.5.0帧着色器:使用来自ddcolor和deoldify的先进模型,为黑白或低色彩素材添加色彩。这些模型利用深度学习技术生成逼真且美观的着色效果。改善唇同步效果:从音频中更清晰、更准确地提......
  • P9437 『XYGOI round1』一棵树
    P9437『XYGOIround1』一棵树trick+换根dp对于此类「将数字顺次写下」计算贡献的题目,通常按位考虑,并且考虑每个数作为开头/结尾时的贡献,方便计算。因此,我们在这题中考虑每个数作为结尾时的贡献。那么这题就转化成:计算以\(u\)为根并且以\(a_u\)为结尾的贡献。明显的换......