abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1695回复:10

在使相同vid,pid的多个设备同时对于不同工作参数正常工作的驱动程序开发中遇到的问题?---------各位老大为什么都只看不说呢??

楼主#
更多 发布于:2004-11-11 22:10
现在我有两个相同的USB设备,VID,PID也相同,我需要写一个驱动程序(过滤驱动,功能驱动采用微软提供的)来同时使两个设备都能正常的工作,并且需要为每个设备创建不同的符号连接名或设备接口的不同实例,就是根据加载的先后顺序来创建不同的设备对象,并且生成不同的设备接口(使用相同接口的不同实例还是不同的接口呢??)或符号连接名,让应用程序感觉到是两个不同的设备和驱动程序,使得我的应用程序能够分别对这两个设备进行操作,并且此时驱动程序对于不同的设备需要保存各自不同的工作参数在以它们自己实例名的注册表项下面,大概情况就是如此,我现在说说我遇到的问题,请高手和做过这方面的给予指点,谢谢!
1 我现在的驱动已经能对单个设备进行操作,但我根据设备加载的先后顺序在驱动里面以创建不同设备名的方式对设备加以区分,然后在应用程序里面用createfile打开设备句柄,当我一次对任一一个设备进行操作时,不会出现问题,但如果同时操作或者操作完关闭该句柄然后打开另一个设备的句柄那么就会崩溃,并且出现0x00000035的停止代码,请问是什么地方不对呢?是不是需要将pdo的stacksize域加1呢,如果我用注册接口的方式代替创建符号连接名会不会同样出现0x00000035的停止代码呢??
2 另外我在跟踪的过程中发现两次加载的驱动在初始化设备名字符串的时候,他们共享同一块内存,当我第一次用一个名字初始化设备名并创建设备后,第二次加载(第一次加载的驱动仍在工作,没有卸载)的驱动程序的那段初始化代码就不起作用,而是将第一次用过后的那个局部变量重新使用(初步判定它使用的还是第一次的那个地址),请问这个问题如何解决??
3 由于初始化代码比较多,因此我将AddDevice例程的部分工作移到一个专门的函数中执行,并且AddDevice例程和这个函数的开头都使用了Page_code(),但是我在这个函数中对局部变量的地址操作(就入2中所描述的,我是加载了两个驱动程序)的时候,驱动导致系统崩溃,并且指示IRQL为2(DISPATCH_LEVEL),而不是passive_level等级,告诉我在较高的IRQL上使用了分页内存导致系统崩溃,可在AddDevice例程中执行时IRQL等级就是PASSIVE_LEVEL,为什么会被提升(我自己没有做这种愚蠢的操作)呢?我对此感到纳闷,不知是何原因??
请高手不吝赐教,一一指点,谢谢!

[编辑 -  11/11/04 by  abanwjc]

[编辑 -  11/11/04 by  abanwjc]
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-11 23:07
都没有人给点建议,只能我自己来顶了,呵呵!不会那么惨吧!
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-16 00:39
1难道大家都没做过类似的东东吗?不太可能吧
2难道我描述得还不够清楚吗?
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-17 07:12
两个相同的USB设备,VID,PID怎么能都相同呢,VID,PID代表什么呢?
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-17 07:13
回答好的话请加分,不行的话请指教
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-25 16:20
你把PID改一改,让每个U盘使用不同的PID
我不是你的天使,我不懂你的天堂
richardfy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-26
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-11-25 17:45
顶一下,我和楼主有同样的问题。
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-11-25 23:25
你把PID改一改,让每个U盘使用不同的PID


如果PID不同的话,驱动加载是怎样的呢?它们会用共同的内存吗?仍然是使用驱动的两个实例吗??
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-11-25 23:27
回答好的话请加分,不行的话请指教


帅哥,你没有回答问题,倒是提了个问题哈,不过分是见人就有份的!
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-11-25 23:32
该问题我已解决,谢谢楼上各位的支持!放分

[编辑 -  11/25/04 by  abanwjc]
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
richardfy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-26
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-11-26 09:06
该问题我已解决,谢谢楼上各位的支持!放分

[编辑 -  11/25/04 by  abanwjc]

大哥,你是怎么解决的,能不能指点一下小弟?
高分相赠。
游客

返回顶部