阅读:4457回复: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 |
|
|