sdyxz123 2023-07-05 12:03 采纳率: 39%
浏览 123
已结题

Windows 驱动 相关 问题

我有个设备上面有 电池 风扇 LED灯,我想写一个windows 驱动 ,这个驱动里 能操作上面的硬件设备,。
问题是关于驱动模型中, 我是一个driver驱动里就创建一个device object 通过这个device 再去操作 上面这些硬件? 还是一个driver里创建多个device object。每个device都对应具体的一个硬件设备? 然后分别去操作这些device,应该怎么选呢?


第一种:
    FDO(风扇)     FDO(LED)   FDO(电池)
    PDO(风扇)     PDO(LED)   PDO(电池)

第二种:
    FDO(风扇 LED  电池)
    PDO(风扇 LED  电池)

第三种:

     FDO(风扇)   FDO(LED)    FDO(电池)
     PDO(风扇  LED  电池)

第二种可以 只有一个设备堆栈,对IRP 处理没有延迟和效率问题
第一种和第三种 有多个设备对象堆栈,面对IRP 穿越延迟效率问题(不知影响是否可以忽略不计) ,但是这两种逻辑清晰
该如何选择呢? 希望写清楚你选择的原因和理由

  • 写回答

5条回答 默认 最新

  • 2301_76247172 2023-07-05 19:45
    关注

    1 这三种方式其实是一样的,你只用了一个驱动,注册的例程都一样, 不同irq请求到来时执行的例程都是同一个,有何区别
    2 你所说的 IRP 处理延迟和效率问题, 这3种方式创建的设备栈都只有两层, 调用效率根本就没有区别
    3 第一种方式创建的3个设备对象, 在你没有指定将这3个设备对象挂在到同一个设备栈上时,这3个设备都是相互独立的设备栈, 并且只有1层

    这3种方式区别在于
    第二种方式创建设备,设备的名称只有一个, 当你在用户空间打开,使用 ioctl 控制 (电池 风扇 LED) 时,你只能在请求时添加参数用来区分三种设备.
    第一种和第三种可以为 (电池 风扇 LED) 取不同的设备名称, 这样你可以用设备名称来区分3种设置.

    如果让我设计,我会设计3个驱动文件分别对应 电池 风扇 LED 三种设备,而不是你这种将三种设备放到一个驱动里面
    如果功能简单,按你的设计我会选择 第一种, 创建不同名称的设备对象来区分三种设备, 就像windows设计的磁盘管理驱动, 设计成设备名称为 C D E 盘这种方式

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月9日
  • 已采纳回答 7月6日
  • 赞助了问题酬金15元 7月5日
  • 修改了问题 7月5日
  • 展开全部

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用