阅读:4571回复:7
一个驱动中 能创建 多个设备对象么?
我指的是在一个 PC机接入 一个物理设备后. 比如一个USB设备.
在驱动的 AddDevice 中能否创建 2 个以上的设备对象??? 如果创建 2 个 FDO, 能否对就同一个 PDO, 还是要自己创建 PDO. |
|
禁止发言
![]() |
沙发#
发布于:2010-09-19 11:04
用户被禁言,该主题自动屏蔽! |
板凳#
发布于:2010-09-19 13:38
我说的不是 Filter Obj, 是 Functional Obj.
而且我用 WDF 写的驱动, 并非用WDM. |
|
地板#
发布于:2010-09-19 15:18
肯定可以的,一个设备可以创建多个实例.否则多个显卡怎么工作?hehe
|
|
|
禁止发言
![]() |
地下室#
发布于:2010-09-19 17:27
用户被禁言,该主题自动屏蔽! |
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, 不知道这种方法是否行得通 ![]() |
|
6楼#
发布于:2010-09-23 09:13
在AddDevice里面创建的设备对象(如果命名的话,就可以当成FDO即功能设备),是总线驱动用来为物理设备创建设备栈的。一般在AddDevice函数里面,只安照标准方式,创建一个设备对象。
如果想单独再创建其他的FiDO或者FDO的话,可以在DriverEntry里面做,也可以根据用户程序发送下来的IOCTL指令动态创建。WDF中创建设备对象的函数是WdfDeviceCreate。是用这个函数,必须自己设置WDFDEVICE_INIT结构体,要仔细看文档。为一个普通设备对象设置WDFDEVICE_INIT,最重要的是设置它的Queue属性,也就是为他设置处理用户命令的Event函数啦。 |
|
|
7楼#
发布于:2010-11-12 11:18
当然可以。举个例子,总线驱动程序里都创建很多设备对象的啊,你可以参考DDK里的总线驱动的例子 toaster
------------------------------------------------------------------ 欢迎访问 帆子内核驱动网 bbs.kerneldev.com |
|
|