eeko2005
驱动牛犊
驱动牛犊
  • 注册日期2010-08-17
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4242回复:7

一个驱动中 能创建 多个设备对象么?

楼主#
更多 发布于:2010-09-19 09:57
我指的是在一个 PC机接入 一个物理设备后. 比如一个USB设备.

在驱动的 AddDevice 中能否创建 2 个以上的设备对象???

如果创建 2 个 FDO,  能否对就同一个 PDO,  还是要自己创建 PDO.
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
沙发#
发布于:2010-09-19 11:04
用户被禁言,该主题自动屏蔽!
eeko2005
驱动牛犊
驱动牛犊
  • 注册日期2010-08-17
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-09-19 13:38
我说的不是 Filter Obj, 是 Functional Obj.

而且我用 WDF 写的驱动, 并非用WDM.
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地板#
发布于:2010-09-19 15:18
肯定可以的,一个设备可以创建多个实例.否则多个显卡怎么工作?hehe

http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
地下室#
发布于:2010-09-19 17:27
用户被禁言,该主题自动屏蔽!
eeko2005
驱动牛犊
驱动牛犊
  • 注册日期2010-08-17
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-09-20 09:02
对于 WDF 比 WDM 更容易用, 我深有体会.  电源、PnP基本上就只要实现简单几个 callback 就可以了, 很方便

在 WDM 中 用 iocreatedevice 创建 device,  没什么限制. 按理说, 连续调用两次 应该 可以创建两个 device .

但在 WDF 模式中,  要用 WdfDeviceCreate 创建 device, Framework 会为你分配一个 WDFDEVICE_INIT 结构, 而这个结构是在 EvtDeviceAdd 回调时传给你, 当你在 EvtDeviceAdd 中用完 WdfDeviceCreate 创建一个 device 之后, 这个 WDFDEVICE_INIT 就不能再用了. 所以在EvtDeviceAdd 中只能创建一个 device

 如果我用 iocreatedevice 建立了 device, Framework 就不会知道, 他也不会帮你去维护这个 device, 最可惜的就是之后的操作就不能用 WDF 的方法.

提出这个问题, 其实是我对 WDF 怎样创建两个以上 device 有点迷惘.

另外我有一个想法, 在设备接入时, 我把它当作 bus device, 然后在上面建立多个 child device, 不知道这种方法是否行得通


Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
6楼#
发布于:2010-09-23 09:13
在AddDevice里面创建的设备对象(如果命名的话,就可以当成FDO即功能设备),是总线驱动用来为物理设备创建设备栈的。一般在AddDevice函数里面,只安照标准方式,创建一个设备对象。
如果想单独再创建其他的FiDO或者FDO的话,可以在DriverEntry里面做,也可以根据用户程序发送下来的IOCTL指令动态创建。WDF中创建设备对象的函数是WdfDeviceCreate。是用这个函数,必须自己设置WDFDEVICE_INIT结构体,要仔细看文档。为一个普通设备对象设置WDFDEVICE_INIT,最重要的是设置它的Queue属性,也就是为他设置处理用户命令的Event函数啦。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
fanzi
驱动小牛
驱动小牛
  • 注册日期2004-12-09
  • 最后登录2013-12-19
  • 粉丝1
  • 关注0
  • 积分1004分
  • 威望754点
  • 贡献值0点
  • 好评度93点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-11-12 11:18
当然可以。举个例子,总线驱动程序里都创建很多设备对象的啊,你可以参考DDK里的总线驱动的例子 toaster


------------------------------------------------------------------
欢迎访问 帆子内核驱动网
bbs.kerneldev.com
张帆的内核学习论坛 http://bbs.kerneldev.com
游客

返回顶部