michael4338
驱动小牛
驱动小牛
  • 注册日期2004-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分238分
  • 威望66点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1302回复:3

两个驱动和一个应用程序的故事

楼主#
更多 发布于:2005-03-30 19:32
我写了两个驱动A和B,一个应用程序C。然后A和C都需要调用B。在B中我用的是符号连接名方式创建设备。
请问为什么应用程序打开设备老是失败呢?
我思故我在
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-31 09:18
请把故事讲详细些
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
板凳#
发布于:2005-03-31 10:41
我写了两个驱动A和B,一个应用程序C。然后A和C都需要调用B。在B中我用的是符号连接名方式创建设备。
请问为什么应用程序打开设备老是失败呢?


首先,检查你的符号链接是否创建正确。

其次,你的A是否也要打开B的DeviceObject,C和B如果是open的同一个DeviceObject(C是通过符号链接打开)就要注意了:
B中用 IoCreateDevice 创建 DeviceObject时第6个参数Exclusive你指定的是TRUE吗?如果是TRUE,则只允许open一次。解决方式是设置Exclusive为FALSE,或者在B中创建两个DeviceObject,一个给A,一个给C。

八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
michael4338
驱动小牛
驱动小牛
  • 注册日期2004-12-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分238分
  • 威望66点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-31 11:21
请把故事讲详细些


故事是这样发生的:
有两个驱动程序A和B。其中A是一个TDI Filter,用来截获TCP和UDP连接信息的。当取到信息后,它要把信息发送到应用程序C,但是TDI层跟应用程序直接打交道有点不妥,所以驱动程序B就产生了。原理是,A取到信息后把它们发送到B,然后C在从B中取出来。所以B就是一个中转台。而A和C都要跟它打交道,也就是说都要打开B中的设备。――不知现在清晰了否?



首先,检查你的符号链接是否创建正确。
其次,你的A是否也要打开B的DeviceObject,C和B如果是open的同一个DeviceObject(C是通过符号链接打开)就要注意了:
B中用 IoCreateDevice 创建 DeviceObject时第6个参数Exclusive你指定的是TRUE吗?如果是TRUE,则只允许open一次。解决方式是设置Exclusive为FALSE,或者在B中创建两个DeviceObject,一个给A,一个给C。


首先,我那个Exclusive的参数本来就是FALSE
其次,不可能创建两个设备,因为我需要同一个设备扩展

我现在面临两个选择:
1、用程序的方法实现WDM的安装,但是老是弹出微软徽标测试,而且安装成功后设备管理器中出现黄色的问号,很不爽
2、驱动程序B中可以实现设备计数,就是设备名字末尾加个序号,可是不太明了该怎么加
请各位多多帮助吧,谢啦
我思故我在
游客

返回顶部