juanshu
驱动牛犊
驱动牛犊
  • 注册日期2001-06-17
  • 最后登录2014-11-05
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望45点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2992回复:14

各位老大,如何在一个驱动里创建多个设 备?(这个问题可能有人提过,但我搜索了几天也没找到,望各位老大帮帮忙,谢谢!)

楼主#
更多 发布于:2003-06-10 10:11
具体的说,我有一块同步串口板,用的芯片是PEB20534,该片具有PCI接口,内部有4个串口通道,我想为它写一个98下的WDM驱动,希望驱动加载后,能为每个通道创建一个独立的设备,我用DS生成了一个驱动框架,在AddDevice里照DS生成的代码,创建了4个设备(每次m_Unit值加一),编译后加载驱动,在应用程序中能够打开4个设备,但只有与第一个设备才能正常交互,其他设备在调用DeviceIoControl时被挂起,不能正常返回。不知各位有没有遇到这样的问题,我该怎么做呢?都十来天了,真是急死了!!!
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-10 11:28
好像和我的问题类似也。分成两个 driver 来做,一个 bus driver,一个 function driver。bus driver 牧举出4个PDO。。。

意下如何? :( :(
我打字很快。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2003-06-10 11:51
设置KSPINLOCK来同步访问设备
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地板#
发布于:2003-06-10 13:09
没有做 ***->Flags &= ~DO_DEVICE_INITIALIZING;
juanshu
驱动牛犊
驱动牛犊
  • 注册日期2001-06-17
  • 最后登录2014-11-05
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望45点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-10 13:09
jason.gao 我也想用你说的法子,可我没写过这样的驱动,有这样的例子可参考么?
juanshu
驱动牛犊
驱动牛犊
  • 注册日期2001-06-17
  • 最后登录2014-11-05
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望45点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-10 13:11
KMK,你说的***->Flags &= ~DO_DEVICE_INITIALIZING;
是什么意思
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
6楼#
发布于:2003-06-10 13:23
        fido->Flags |= fido->Flags & (DO_DIRECT_IO | DO_BUFFERED_IO | DO_POWER_PAGABLE);
fido->Flags &= ~DO_DEVICE_INITIALIZING;    

如上
在创建设备後要色放开,不然打不开啊 !


http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&th=c8c5a1a84ac997f0&rnum=7

[编辑 -  6/10/03 by  KMK]
juanshu
驱动牛犊
驱动牛犊
  • 注册日期2001-06-17
  • 最后登录2014-11-05
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望45点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-10 14:31
现在是能打开,但在调用DeviceIoControl时被挂起。另外,我用的是DriverStudio写的驱动,这些问题应该在KDevice类中封装处理过了吧?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-10 14:52
一个Driver多个DeviceObject没有问题,你可能没有处理好,
在kbdcalss中有考虑多个DeviceObject的,你可参阅一下
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
jason.gao
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-10 15:54
AllenZh说得应该是对的,而且,是不是可以说所有的class driver中都有多个DeviceObject(它自身的FDO,以及代表下层port driver的FDO?)

Bus Driver 的问题我正在考虑做(可参考我的帖子),例子有一些,比如 Mass Storage (枚举出磁盘),serenum (DDK里面的,挂接在串口上的,枚举出PnP的串口设备)。我的感觉写起来还是比较麻烦的,因为里面既有FDO,又有PDO。

我现在被这些FDO和PDO弄得有点晕了 :(

如果你要用这个方法,我们就可以共同研究了 :D
我打字很快。
juanshu
驱动牛犊
驱动牛犊
  • 注册日期2001-06-17
  • 最后登录2014-11-05
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望45点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-11 09:07
谢谢各位帮忙,分数太少,意思一下。
我再研究一下,有结果我会公布出来与大家分享。
很希望与jason.gao共同研究总线驱动问题,可惜目前进度太紧,恐怕时间不允许,过了这段时间我会继续总线驱动的,到时会向你请教。这中间如果有问题不妨来信,大家一起探讨一下。
再次谢谢各位大侠拔刀相助!!!
daphant
驱动牛犊
驱动牛犊
  • 注册日期2001-10-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望14点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-06-11 11:05
老兄,我有个疑问,我曾经看过一些文章说有些设备在98下是不能用wdm的必须用vxd,比如串口,上面的朋友,你们能确定用这样的wdm程序可以用在98下吗?
seant
驱动牛犊
驱动牛犊
  • 注册日期2001-07-05
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-15 10:59
我没有做过这样的驱动,不过根据一些理论知识,我认为这样的设计有几个问题:

1)通常书上讲的用于多个设备的驱动程序,是针对系统中实际存在多个相同的物理设备的情况。这时,每个物理设备都会产生一个物理设备对象(PDO),用同一个驱动程序在每个物理设备对象上产生一个功能设备对象。而这里讲到的情况是只有一个物理设备,也就是只有一个物理设备对象会被创建。因此,如果在驱动程序的INIT例程里通过多次调用IoCreateDevice来生成多个功能设备对象,那么这N个功能设备对象如何添加到设备栈上?只能一个一个地重叠起来。这样,除了最下面的那个功能设备对象外,其余的功能设备对象都会面临一些问题,比如:收到了IRP后如何正确处理?如果IRP要向下传递的话,那么最上面的那个FDO会把IRP传给第二个FDO,这是会不会有问题?
zhang79
驱动牛犊
驱动牛犊
  • 注册日期2001-08-17
  • 最后登录2013-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-16 18:06
我想你是写的PNP驱动吧.
对于PNP驱动要有一个总线驱动程序来枚举每个物理设备.
你那块卡里有四个串口通道,Windows不会知道有四个串口,
因而不会自动枚举到这四个物理设备,再调用AddDevice().
这些都是你自己要完成的.

chaochao1986081
驱动牛犊
驱动牛犊
  • 注册日期2009-10-13
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2010-08-06 16:46
Re:各位老大,如何在一个驱动里创建多个设 备?(这个问题可能有人提过,但我搜索了几天也没找到,望各 ..
楼主,你说的现象和我一摸一样,对你来说都过了七八年了,把这个你现在认为是毛毛雨的答案给说一下吧,我为这个问题也困扰好几天了,也是初步用DRIVER STUDIO的!! 我的QQ: 286025184            希望知道方法的朋友们能给解答下,谢谢了!!!
游客

返回顶部