bluemoonxd
驱动牛犊
驱动牛犊
  • 注册日期2005-03-18
  • 最后登录2005-04-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1992回复:6

我特别想请教这个问题:一个驱动程序如何驱动多个设备,驱动一样,应用程序呢?

楼主#
更多 发布于:2005-03-18 16:59
一个驱动程序如何驱动多个设备,驱动一样,应用程序呢?

我特别想请教这个问题?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-03-18 17:16
在驱动中创建多个设备对象代表不同设备,在设备扩展中设置相应的属性,然后在处理例程里进行分别判断处理即可.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-19 11:55
在驱动中创建多个设备对象代表不同设备,在设备扩展中设置相应的属性,然后在处理例程里进行分别判断处理即可.

老大说的完全正确,补充一下,顺便用IoCreateSymbolicLink为不同设备创建不同的符号连接(可以按设备号排)
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-21 09:43
一个驱动程序如何驱动多个设备,驱动一样,应用程序呢?

我特别想请教这个问题?

为了把问题讲的清楚,请严格区分两个概念,驱动对象(driver)和设备(device)对象,二者都有自己的Extension。
对于这个问题,我想借用类和实例的概念类比一下,虽然并不完全准确,但这样便很清楚了
驱动相当于类,其中在DriverEntry中定义的分发例程,相当于类中的成员函数,驱动对象的Extension,相当于是类中的静态成员变量,所有设备对象处理请求时都共享它们
设备对象相当于实例,每次PnP发现新设备,就会调用一次AddDevice产生一个设备,AddDevice相当于类的建构函数。设备对象的Extension相当于成员变量,即每个实例不同,存储设备特定的信息
为了区分设备,肯定要在驱动对象(driver)Extension中存一个设备顺序号,这样每次找到一个设备,就将这个序号加1,这样可以为每个设备创建LPT1,LPT2...这样按顺序的设备名及创建对应的符号连接。也因此应用程序可以通过这样的不同的设备名和符号连接利用驱动和设备通讯
上面类比是本人自己的体会,可能有错误之处,万望各位大侠不吝赐教,切切!!!
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-21 11:36
[quote]一个驱动程序如何驱动多个设备,驱动一样,应用程序呢?

我特别想请教这个问题?

为了把问题讲的清楚,请严格区分两个概念,驱动对象(driver)和设备(device)对象,二者都有自己的Extension。
对于这个问题,我想借用类和实例的概念类比一下,虽然并不完全准确,但这样便很清楚了
驱动相当于类,其中在DriverEntry中定义的分发例程,相当于类中的成员函数,驱动对象的Extension,相当于是类中的静态成员变量,所有设备对象处理请求时都共享它们
设备对象相当于实例,每次PnP发现新设备,就会调用一次AddDevice产生一个设备,AddDevice相当于类的建构函数。设备对象的Extension相当于成员变量,即每个实例不同,存储设备特定的信息
为了区分设备,肯定要在驱动对象(driver)Extension中存一个设备顺序号,这样每次找到一个设备,就将这个序号加1,这样可以为每个设备创建LPT1,LPT2...这样按顺序的设备名及创建对应的符号连接。也因此应用程序可以通过这样的不同的设备名和符号连接利用驱动和设备通讯
上面类比是本人自己的体会,可能有错误之处,万望各位大侠不吝赐教,切切!!! [/quote]


说的挺好的,很形象
在交流中学习。。。
xiebf
驱动牛犊
驱动牛犊
  • 注册日期2005-03-11
  • 最后登录2006-10-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-01 09:50
非常感谢。
我是这样做的:因为我的设备是non pnp的isr卡,我就在adddevice函数中生成两个kpnpdevice,他们的symblic link name 分别是XIOCard0和XIOCard1,在应用程序中,我通过调用CreateFile打开两个设备,第一个设备能正常工作,但第二个设备能成功打开,但当调用DeviceIoControl给我的驱动传递参数时,机器就死 了,这是怎么回事呢,考虑了一个星期了,郁闷死了。请帮助我,再一次感谢


 
bluemoonxd
驱动牛犊
驱动牛犊
  • 注册日期2005-03-18
  • 最后登录2005-04-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-02 16:43
非常感谢!!:)
这个问题解决了,第二个卡的驱动得用driverstuido重新生成一遍,给不同的卡安上,靠guid区分就可以了,原来我只是把同一个驱动复制了两份,再改了guid重新编译后给两个卡安上,这样不好用。

是不是driverstuido已经自动完成了在驱动中创建多个设备对象代表不同设备的工作,并在驱动对象(driver)Extension中存一个设备顺序号阿,因为我没有改动DriverEntry的例程。
游客

返回顶部