阅读:1302回复:3
两个驱动和一个应用程序的故事
我写了两个驱动A和B,一个应用程序C。然后A和C都需要调用B。在B中我用的是符号连接名方式创建设备。
请问为什么应用程序打开设备老是失败呢? |
|
|
沙发#
发布于:2005-03-31 09:18
请把故事讲详细些
|
|
|
板凳#
发布于: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。 |
|
|
地板#
发布于:2005-03-31 11:21
请把故事讲详细些 故事是这样发生的: 有两个驱动程序A和B。其中A是一个TDI Filter,用来截获TCP和UDP连接信息的。当取到信息后,它要把信息发送到应用程序C,但是TDI层跟应用程序直接打交道有点不妥,所以驱动程序B就产生了。原理是,A取到信息后把它们发送到B,然后C在从B中取出来。所以B就是一个中转台。而A和C都要跟它打交道,也就是说都要打开B中的设备。――不知现在清晰了否?
首先,我那个Exclusive的参数本来就是FALSE 其次,不可能创建两个设备,因为我需要同一个设备扩展 我现在面临两个选择: 1、用程序的方法实现WDM的安装,但是老是弹出微软徽标测试,而且安装成功后设备管理器中出现黄色的问号,很不爽 2、驱动程序B中可以实现设备计数,就是设备名字末尾加个序号,可是不太明了该怎么加 请各位多多帮助吧,谢啦 |
|
|